diff --git a/algorithm/henzinger_king.h b/algorithm/henzinger_king.h index 2b51d78..d931332 100644 --- a/algorithm/henzinger_king.h +++ b/algorithm/henzinger_king.h @@ -6,7 +6,7 @@ using namespace graph; -constexpr int max_set_size = 5; +constexpr int threshold = 5; namespace algo { @@ -98,7 +98,7 @@ void HenzingerKing::insert(const T& c, const std::vector& vertices) { insert(c, w); S.insert(c); - if (S.size() > max_set_size) { + if (S.size() > threshold) { init(); return; } diff --git a/test/dynamic_reachability_test.cc b/test/dynamic_reachability_test.cc index adbebb7..a2fdef9 100644 --- a/test/dynamic_reachability_test.cc +++ b/test/dynamic_reachability_test.cc @@ -7,26 +7,6 @@ using namespace graph; TEST_SUITE("Dynamic Reachability Test") { - TEST_CASE("HenzingerKing") { - Digraph G; - G.insert(1, 2); - - algo::HenzingerKing henzingerKing(G); - henzingerKing.init(); - - SUBCASE("HenzingerKing::query") { - - } - - SUBCASE("HenzingerKing::remove") { - - } - - SUBCASE("HenzingerKing::insert") { - - } - } - TEST_CASE("King") { // 1 --> 2 --> 4 --> 6 --> 8 --> 9 // 4 --> 5 --> 7 --> 8 @@ -86,4 +66,71 @@ TEST_SUITE("Dynamic Reachability Test") { CHECK_EQ(king.query(2, 10), false); } } + + TEST_CASE("HenzingerKing") { + // 1 --> 2 --> 4 --> 6 --> 8 --> 9 --> 5 + // 4 --> 5 --> 7 --> 8 + // 5 --> 6 + // 7 --> 9 + // 2 --> 3 --> 1 + // 3 --> 5 + // 3 --> 9 + Digraph G; + G.insert(1, 2); + G.insert(2, 4); + G.insert(2, 3); + G.insert(3, 1); + G.insert(3, 5); + G.insert(3, 9); + G.insert(4, 5); + G.insert(4, 6); + G.insert(5, 6); + G.insert(5, 7); + G.insert(6, 8); + G.insert(7, 8); + G.insert(7, 9); + G.insert(8, 9); + G.insert(9, 5); + + REQUIRE_EQ(G.adjMatrix.size(), 9); + + algo::HenzingerKing henzingerKing(G); + henzingerKing.init(); + + SUBCASE("HenzingerKing::query") { + CHECK_EQ(henzingerKing.query(1, 9), true); + CHECK_EQ(henzingerKing.query(2, 8), true); + CHECK_EQ(henzingerKing.query(3, 9), true); + CHECK_EQ(henzingerKing.query(9, 5), true); + CHECK_EQ(henzingerKing.query(4, 3), false); + CHECK_EQ(henzingerKing.query(5, 4), false); + CHECK_EQ(henzingerKing.query(6, 1), false); + } + + SUBCASE("HenzingerKing::remove") { + henzingerKing.remove({ {7, 8}, {6, 8}, {3, 1} }); + + CHECK_EQ(henzingerKing.query(1, 3), true); + CHECK_EQ(henzingerKing.query(1, 9), true); + CHECK_EQ(henzingerKing.query(4, 5), true); + CHECK_EQ(henzingerKing.query(3, 1), false); + CHECK_EQ(henzingerKing.query(6, 8), false); + CHECK_EQ(henzingerKing.query(7, 8), false); + CHECK_EQ(henzingerKing.query(1, 8), false); + CHECK_EQ(henzingerKing.query(8, 4), false); + + henzingerKing.remove({ {4, 5}, {5, 6} }); + + CHECK_EQ(henzingerKing.query(2, 9), true); + CHECK_EQ(henzingerKing.query(9, 6), false); + CHECK_EQ(henzingerKing.query(4, 6), false); + } + + SUBCASE("HenzingerKing::insert") { + henzingerKing.insert(4, 6); + + CHECK_EQ(henzingerKing.query(1, 6), true); + CHECK_EQ(henzingerKing.query(3, 6), true); + } + } } \ No newline at end of file