From 2024f496eb5010276257e5e6f7234be5a477a90c Mon Sep 17 00:00:00 2001 From: Siddhartha Date: Sat, 16 Oct 2021 11:13:21 +0530 Subject: [PATCH] basic tests for union-find data structure --- .gitignore | 3 +++ CMakeLists.txt | 1 + test/UnionFindTest.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 test/UnionFindTest.cpp diff --git a/.gitignore b/.gitignore index 259148fa1..59ebb2404 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ *.exe *.out *.app + +# ignore the build folder contents from git +build/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 45e1346dd..4ead0d845 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,7 @@ add_executable(test_exe test/main.cpp test/PartitionTest.cpp test/DialTest.cpp test/GraphSlicingTest.cpp + test/UnionFindTest.cpp ) target_include_directories(test_exe PUBLIC "${PROJECT_SOURCE_DIR}/include" diff --git a/test/UnionFindTest.cpp b/test/UnionFindTest.cpp new file mode 100644 index 000000000..3487fce4f --- /dev/null +++ b/test/UnionFindTest.cpp @@ -0,0 +1,54 @@ +#include "gtest/gtest.h" +#include "CXXGraph.hpp" + +TEST(UnionFindTest, test_1) +{ + CXXGRAPH::Node node0(0, 0); + CXXGRAPH::Node node1(1, 1); + CXXGRAPH::Node node2(2, 2); + CXXGRAPH::Node node3(3, 3); + + /* + 0 + 1 2 + 3 + */ + CXXGRAPH::UndirectedWeightedEdge edge1(0, node0, node1, 5); + CXXGRAPH::UndirectedWeightedEdge edge2(1, node0, node2, 10); + CXXGRAPH::UndirectedWeightedEdge edge3(2, node1, node3, 5); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + + CXXGRAPH::Graph graph(edgeSet); + + // every element is a subset of itself + CXXGRAPH::Subset subset[4] = {{0, 0}, {1, 0}, {2, 0}, {3, 0}}; + auto res = graph.setFind(subset, node0.getId()); + ASSERT_EQ(res, 0); + res = graph.setFind(subset, node1.getId()); + ASSERT_EQ(res, 1); + res = graph.setFind(subset, node2.getId()); + ASSERT_EQ(res, 2); + + // element 1 & 2 are subset of 0 + // element 3 is subset of 1 + CXXGRAPH::Subset subset1[4] = {{0, 0}, {0, 0}, {0, 0}, {1, 0}}; + auto res1 = graph.setFind(subset1, node0.getId()); + ASSERT_EQ(res1, 0); + res = graph.setFind(subset1, node3.getId()); + ASSERT_EQ(res1, 0); + res = graph.setFind(subset1, node2.getId()); + ASSERT_EQ(res1, 0); + + // union of (node 1 & node3) should increase node0 rank by 1 + CXXGRAPH::Subset subset2[4] = {{0, 0}, {0, 0}, {0, 0}, {1, 0}}; + graph.setUnion(subset2, node1.getId(), node3.getId()); + ASSERT_EQ(subset2[0].rank, 1); + ASSERT_EQ(subset2[3].parent, 0); + + // rank shouldn't increase since both have the same parent + graph.setUnion(subset2, node2.getId(), node3.getId()); + ASSERT_EQ(subset2[0].rank, 1); + ASSERT_EQ(subset2[3].parent, 0); +} \ No newline at end of file