From 41e5bead437446a1212596cf048c3678aa8f48fd Mon Sep 17 00:00:00 2001 From: stefiosif Date: Wed, 20 Jul 2022 23:46:50 +0300 Subject: [PATCH] Add new tests, remove duplicate tests (scc creation ~ tarjan's algorithm) --- test/algorithm_test.cc | 122 ++++++++++++++++++++++++++++------------- test/graph_test.cc | 84 ++-------------------------- 2 files changed, 90 insertions(+), 116 deletions(-) diff --git a/test/algorithm_test.cc b/test/algorithm_test.cc index c374972..c827ae7 100644 --- a/test/algorithm_test.cc +++ b/test/algorithm_test.cc @@ -7,7 +7,7 @@ using namespace graph; TEST_SUITE("Algorithm") { - TEST_CASE("Tarjan T1") { + TEST_CASE("Tarjan::execute 1") { // 1 --> 2 --> 4 --> 1 // 2 --> 3 --> 5 --> 7 --> 3 // 5 --> 9 --> 6 --> 8 --> 9 @@ -24,25 +24,24 @@ TEST_SUITE("Algorithm") { G.insert(8, 9); G.insert(9, 6); - REQUIRE_EQ(G.vertices.size(), 9); + REQUIRE_EQ(G.adjMatrix.size(), 9); algo::Tarjan tarjan(G); - auto res = tarjan.execute(); + auto r = tarjan.execute(); - std::vector> exp = { + std::vector> x = { {6, 8, 9}, {3, 5, 7}, {1, 2, 4} }; - for (auto i = 0; i < res.size(); i++) { - auto kv = std::views::keys(res[i].adjMatrix); - CHECK_EQ(std::is_permutation(kv.begin(), kv.end(), exp[i].begin()), - true); + for (auto i = 0; i < r.size(); i++) { + auto kv = std::views::keys(r[i].adjMatrix); + CHECK_EQ(std::is_permutation(kv.begin(), kv.end(), x[i].begin()), true); } } - TEST_CASE("Tarjan T2") { + TEST_CASE("Tarjan::execute 2") { // 1 --> 2 --> 5 --> 7 --> 2 // 1 --> 4 --> 3 --> 1 // 4 --> 6 --> 3 @@ -57,24 +56,66 @@ TEST_SUITE("Algorithm") { G.insert(6, 3); G.insert(7, 2); - REQUIRE_EQ(G.vertices.size(), 7); + REQUIRE_EQ(G.adjMatrix.size(), 7); algo::Tarjan tarjan(G); - auto res = tarjan.execute(); + auto r = tarjan.execute(); - std::vector> exp = { + std::vector> x = { {2, 5, 7}, {1, 3, 4, 6} }; - for (auto i = 0; i < res.size(); i++) { - auto kv = std::views::keys(res[i].adjMatrix); - CHECK_EQ(std::is_permutation(kv.begin(), kv.end(), exp[i].begin()), - true); + for (auto i = 0; i < r.size(); i++) { + auto kv = std::views::keys(r[i].adjMatrix); + CHECK_EQ(std::is_permutation(kv.begin(), kv.end(), x[i].begin()), true); } } - TEST_CASE("BFS T1") { + TEST_CASE("Tarjan::execute 3") { + // 1 --> 2 --> 3 --> 1 + // 3 --> 4 --> 5 --> 3 + // 2 --> 6 --> 7 --> 8 --> 6 + // 6 --> 9 --> 10 --> 11 --> 12 --> 13 --> 9 + // 12 --> 10 + Digraph G; + G.insert(1, 2); + G.insert(2, 3); + G.insert(3, 1); + G.insert(3, 4); + G.insert(4, 5); + G.insert(5, 3); + G.insert(2, 6); + G.insert(6, 7); + G.insert(7, 8); + G.insert(7, 9); + G.insert(8, 6); + G.insert(6, 9); + G.insert(9, 10); + G.insert(10, 11); + G.insert(11, 12); + G.insert(12, 13); + G.insert(13, 9); + G.insert(12, 10); + + REQUIRE_EQ(G.adjMatrix.size(), 13); + + algo::Tarjan tarjan(G); + auto r = tarjan.execute(); + + std::vector> x = { + {9, 10, 11, 12, 13}, + {6, 7, 8}, + {1, 2, 3, 4, 5} + }; + + for (auto i = 0; i < r.size(); i++) { + auto kv = std::views::keys(r[i].adjMatrix); + CHECK_EQ(std::is_permutation(kv.begin(), kv.end(), x[i].begin()), true); + } + } + + TEST_CASE("BreadthFirstSearch::execute 1") { // 1 --> 2 --> 5 --> 7 --> 2 // 1 --> 4 --> 3 --> 1 // 4 --> 6 --> 3 @@ -90,36 +131,24 @@ TEST_SUITE("Algorithm") { G.insert(7, 2); algo::BreadthFirstSearch bfs(G); - auto tree = bfs.execute(1); + auto r = bfs.execute(1); - /*std::map> exp = { - {1, {2, 4}}, - {2, {5}}, - {3, {}}, - {4, {3, 6}}, - {5, {7}}, - {6, {}}, - {7, {}} - };*/ - - std::map> exp = { + std::map> x = { {1, {2, 4}}, {2, {5}}, {4, {3, 6}}, {5, {7}} }; - CHECK_EQ(tree, exp); + CHECK_EQ(r, x); } - - - TEST_CASE("BFS") { + TEST_CASE("BreadthFirstSearch::execute 2") { // 1 --> 2 --> 3 --> 1 -// 3 --> 4 --> 5 --> 3 -// 2 --> 6 --> 7 --> 8 --> 6 -// 6 --> 9 --> 10 --> 11 --> 12 --> 13 --> 9 -// 12 --> 10 + // 3 --> 4 --> 5 --> 3 + // 2 --> 6 --> 7 --> 8 --> 6 + // 6 --> 9 --> 10 --> 11 --> 12 --> 13 --> 9 + // 12 --> 10 Digraph G; G.insert(1, 2); G.insert(2, 3); @@ -130,6 +159,7 @@ TEST_SUITE("Algorithm") { G.insert(2, 6); G.insert(6, 7); G.insert(7, 8); + G.insert(7, 9); G.insert(8, 6); G.insert(6, 9); G.insert(9, 10); @@ -138,5 +168,23 @@ TEST_SUITE("Algorithm") { G.insert(12, 13); G.insert(13, 9); G.insert(12, 10); + + algo::BreadthFirstSearch bfs(G); + auto r = bfs.execute(1); + + std::map> x = { + {1, {2}}, + {2, {3, 6}}, + {3, {4}}, + {4, {5}}, + {6, {7, 9}}, + {7, {8}}, + {9, {10}}, + {10, {11}}, + {11, {12}}, + {12, {13}} + }; + + CHECK_EQ(r, x); } } \ No newline at end of file diff --git a/test/graph_test.cc b/test/graph_test.cc index 5593ca9..02a9404 100644 --- a/test/graph_test.cc +++ b/test/graph_test.cc @@ -9,7 +9,7 @@ using namespace graph; TEST_SUITE("Graph") { - TEST_CASE("Reverse") { + TEST_CASE("Digraph::reverse") { // 1 --> 2 --> 4 --> 1 // 2 --> 3 --> 5 --> 7 --> 3 // 5 --> 9 --> 6 --> 8 --> 9 @@ -26,11 +26,11 @@ TEST_SUITE("Graph") { G.insert(8, 9); G.insert(9, 6); - REQUIRE_EQ(G.vertices.size(), 9); + REQUIRE_EQ(G.adjMatrix.size(), 9); - auto RG = G.reverse(); + auto R = G.reverse(); - std::map> exp = { + std::map> X = { {1, {4}}, {2, {1}}, {3, {2, 7}}, @@ -42,81 +42,7 @@ TEST_SUITE("Graph") { {9, {5, 8}} }; - CHECK_EQ(RG.adjMatrix, exp); + CHECK_EQ(R, X); } - TEST_CASE("SCC T1") { - // 1 --> 2 --> 4 --> 1 - // 2 --> 3 --> 5 --> 7 --> 3 - // 5 --> 9 --> 6 --> 8 --> 9 - Digraph G; - G.insert(1, 2); - G.insert(2, 3); - G.insert(2, 4); - G.insert(3, 5); - G.insert(4, 1); - G.insert(5, 7); - G.insert(5, 9); - G.insert(6, 8); - G.insert(7, 3); - G.insert(8, 9); - G.insert(9, 6); - - REQUIRE_EQ(G.vertices.size(), 9); - - algo::Tarjan tarjan(G); - auto sccs = tarjan.execute(); - } - - TEST_CASE("SCC T2") { - // 1 --> 2 --> 5 --> 7 --> 2 - // 1 --> 4 --> 3 --> 1 - // 4 --> 6 --> 3 - Digraph G; - G.insert(1, 2); - G.insert(1, 4); - G.insert(2, 5); - G.insert(3, 1); - G.insert(4, 3); - G.insert(4, 6); - G.insert(5, 7); - G.insert(6, 3); - G.insert(7, 2); - - REQUIRE_EQ(G.vertices.size(), 7); - - algo::Tarjan tarjan(G); - auto sccs = tarjan.execute(); - } - - TEST_CASE("SCC T3") { - // 1 --> 2 --> 3 --> 1 - // 3 --> 4 --> 5 --> 3 - // 2 --> 6 --> 7 --> 8 --> 6 - // 6 --> 9 --> 10 --> 11 --> 12 --> 13 --> 9 - // 12 --> 10 - Digraph G; - G.insert(1, 2); - G.insert(2, 3); - G.insert(3, 1); - G.insert(3, 4); - G.insert(4, 5); - G.insert(5, 3); - G.insert(2, 6); - G.insert(6, 7); - G.insert(7, 8); - G.insert(8, 6); - G.insert(6, 9); - G.insert(9, 10); - G.insert(10, 11); - G.insert(11, 12); - G.insert(12, 13); - G.insert(13, 9); - G.insert(12, 10); - - REQUIRE_EQ(G.vertices.size(), 13); - - algo::Tarjan tarjan(G); - auto sccs = tarjan.execute(); - } } \ No newline at end of file