aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/tests/testtoposort.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/ApiExtractor/tests/testtoposort.cpp')
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testtoposort.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/sources/shiboken6/ApiExtractor/tests/testtoposort.cpp b/sources/shiboken6/ApiExtractor/tests/testtoposort.cpp
new file mode 100644
index 000000000..50cefcfe9
--- /dev/null
+++ b/sources/shiboken6/ApiExtractor/tests/testtoposort.cpp
@@ -0,0 +1,61 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "testtoposort.h"
+#include "graph.h"
+
+#include <QtTest/QTest>
+#include <QtCore/QDebug>
+
+using IntGraph = Graph<int>;
+
+Q_DECLARE_METATYPE(IntGraph)
+
+using IntList = QList<int>;
+
+void TestTopoSort::testTopoSort_data()
+{
+ QTest::addColumn<IntGraph>("graph");
+ QTest::addColumn<bool>("expectedValid");
+ QTest::addColumn<IntList>("expectedOrder");
+
+ const int nodes1[] = {0, 1, 2};
+ IntGraph g(std::begin(nodes1), std::end(nodes1));
+ g.addEdge(1, 2);
+ g.addEdge(0, 1);
+ IntList expected = {0, 1, 2};
+ QTest::newRow("DAG") << g << true << expected;
+
+ const int nodes2[] = {0, 1};
+ g.clear();
+ g.setNodes(std::begin(nodes2), std::end(nodes2));
+ expected = {1, 0};
+ QTest::newRow("No edges") << g << true << expected;
+
+ g.clear();
+ g.setNodes(std::begin(nodes1), std::end(nodes1));
+ g.addEdge(0, 1);
+ g.addEdge(1, 2);
+ g.addEdge(2, 0);
+ expected.clear();
+ QTest::newRow("Cyclic") << g << false << expected;
+}
+
+void TestTopoSort::testTopoSort()
+{
+ QFETCH(IntGraph, graph);
+ QFETCH(bool, expectedValid);
+ QFETCH(IntList, expectedOrder);
+
+ const auto result = graph.topologicalSort();
+ QCOMPARE(result.isValid(), expectedValid);
+ if (expectedValid) {
+ QCOMPARE(result.result, expectedOrder);
+ QVERIFY(result.cyclic.isEmpty());
+ } else {
+ QVERIFY(!result.cyclic.isEmpty());
+ }
+}
+
+QTEST_APPLESS_MAIN(TestTopoSort)
+