From 85579c8b8020db8eda5beaf95174adb0806c5b29 Mon Sep 17 00:00:00 2001 From: Nolan Kramer Date: Fri, 28 Jul 2023 02:29:00 -0700 Subject: [PATCH 1/4] Demonstrate edge set skips unique edges --- test/CMakeLists.txt | 1 + test/GraphTest.cpp | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0654d5614..7d9233ebb 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -49,6 +49,7 @@ if(TEST) PUBLIC ${zlib_BINARY_DIR} PUBLIC ${zlib_SOURCE_DIR} ) + target_link_libraries(test_exe PUBLIC GTest::gtest_main PUBLIC zlibstatic diff --git a/test/GraphTest.cpp b/test/GraphTest.cpp index 9c8ec99f7..eafc1f000 100644 --- a/test/GraphTest.cpp +++ b/test/GraphTest.cpp @@ -168,7 +168,6 @@ TEST(GraphTest, DirectedEdgeCycle_1) { CXXGraph::DirectedEdge edge2(1, node2, node1); CXXGraph::DirectedEdge edge3(2, node3, node1); - CXXGraph::Graph graph; graph.addEdge(&edge1); graph.addEdge(&edge2); graph.addEdge(&edge3); @@ -197,6 +196,41 @@ TEST(GraphTest, DirectedEdgeCycle_2) { ASSERT_EQ(graph.getEdgeSet().size(), 3); } +TEST(GraphTest, DirectedEdge_hashequality) { + CXXGraph::Node node1("node1 (0)", 0); + CXXGraph::Node node2("node2 (1)", 1); + CXXGraph::Node node3("node3 (2)", 2); + CXXGraph::Node node4("node4 (3)", 3); + CXXGraph::Node node5("node5 (4)", 4); + CXXGraph::Node node6("node6 (5)", 5); + CXXGraph::Node node7("node7 (6)", 6); + + CXXGraph::DirectedEdge edge1(0, node1, node2); + CXXGraph::DirectedEdge edge2(1, node2, node3); + CXXGraph::DirectedEdge edge3(3, node5, node4); + CXXGraph::DirectedEdge edge4(4, node5, node3); + CXXGraph::DirectedEdge edge5(5, node5, node2); + CXXGraph::DirectedEdge edge6(6, node5, node6); + CXXGraph::DirectedEdge edge7(7, node5, node1); + CXXGraph::DirectedEdge edge8(8, node5, node7); + CXXGraph::DirectedEdge edge9(9, node3, node4); + CXXGraph::DirectedEdge edge10(10, node6, node2); + CXXGraph::DirectedEdge edge11(11, node7, node2); + + CXXGraph::Graph graph; + + graph.addEdge(&edge4); + graph.addEdge(&edge5); + graph.addEdge(&edge6); + graph.addEdge(&edge7); + graph.addEdge(&edge8); + graph.addEdge(&edge9); + graph.addEdge(&edge10); + graph.addEdge(&edge11); + + // Check that all of the edges have been added to the graph + ASSERT_EQ(graph.getEdgeSet().size(), 11); + TEST(GraphTest, adj_print_1) { CXXGraph::Node node1("1", 1); CXXGraph::Node node2("2", 2); From 1f9229143e4be19f5f5db951aab899265426973f Mon Sep 17 00:00:00 2001 From: Nolan Kramer Date: Tue, 4 Jul 2023 15:44:08 -0700 Subject: [PATCH 2/4] Add helpful output --- test/GraphTest.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/GraphTest.cpp b/test/GraphTest.cpp index eafc1f000..75bbb5397 100644 --- a/test/GraphTest.cpp +++ b/test/GraphTest.cpp @@ -230,6 +230,7 @@ TEST(GraphTest, DirectedEdge_hashequality) { // Check that all of the edges have been added to the graph ASSERT_EQ(graph.getEdgeSet().size(), 11); +} TEST(GraphTest, adj_print_1) { CXXGraph::Node node1("1", 1); From ca468b037706f14dd22c3a1b80dfdc73c299c04b Mon Sep 17 00:00:00 2001 From: Nolan Kramer Date: Tue, 4 Jul 2023 15:54:18 -0700 Subject: [PATCH 3/4] Add hash output --- test/GraphTest.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/test/GraphTest.cpp b/test/GraphTest.cpp index 75bbb5397..690ec4900 100644 --- a/test/GraphTest.cpp +++ b/test/GraphTest.cpp @@ -219,14 +219,33 @@ TEST(GraphTest, DirectedEdge_hashequality) { CXXGraph::Graph graph; - graph.addEdge(&edge4); - graph.addEdge(&edge5); - graph.addEdge(&edge6); - graph.addEdge(&edge7); - graph.addEdge(&edge8); - graph.addEdge(&edge9); - graph.addEdge(&edge10); - graph.addEdge(&edge11); + CXXGraph::T_EdgeSet edges; + auto addEdge = [&](CXXGraph::DirectedEdge& edge) + { + size_t currSize = edges.size(); + auto sharedEdge = CXXGraph::make_shared>(edge.getId(), edge.getFrom(), edge.getTo()); + edges.insert(sharedEdge); + if ((currSize + 1) != edges.size()) + { + std::cout << "Skipped " << edge.getNodePair().first->getUserId() << " --> " << edge.getNodePair().second->getUserId() << " (hash: " << CXXGraph::edgeHash{}(sharedEdge) << ")" << std::endl; + } else { + std::cout << "Added " << edge.getNodePair().first->getUserId() << " --> " << edge.getNodePair().second->getUserId() << " (hash: " << CXXGraph::edgeHash{}(sharedEdge) << ")" << std::endl; + } + }; + + addEdge(&edge1); + addEdge(&edge2); + addEdge(&edge3); + addEdge(&edge4); + addEdge(&edge5); + addEdge(&edge6); + addEdge(&edge7); + addEdge(&edge8); + addEdge(&edge9); + addEdge(&edge10); + addEdge(&edge11); + + graph.setEdgeSet(edges); // Check that all of the edges have been added to the graph ASSERT_EQ(graph.getEdgeSet().size(), 11); From 1b4ed69cb4426729e10a8e5be21f29fbf14322ae Mon Sep 17 00:00:00 2001 From: Nolan Kramer Date: Fri, 28 Jul 2023 02:37:47 -0700 Subject: [PATCH 4/4] Fix for Edge equality operator is incorrect #333 --- include/Graph/Graph.hpp | 1 + include/Utility/PointerHash.hpp | 2 +- test/GraphTest.cpp | 27 ++++++++++++++------------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/Graph/Graph.hpp b/include/Graph/Graph.hpp index c25d90be4..a9aa51fbe 100644 --- a/include/Graph/Graph.hpp +++ b/include/Graph/Graph.hpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include diff --git a/include/Utility/PointerHash.hpp b/include/Utility/PointerHash.hpp index fdc3420b5..c898c4eb2 100755 --- a/include/Utility/PointerHash.hpp +++ b/include/Utility/PointerHash.hpp @@ -69,7 +69,7 @@ template bool operator==(shared> p1, shared> p2) { return p1->getNodePair().first->getUserId() == p2->getNodePair().first->getUserId() && - p2->getNodePair().second->getUserId() == + p1->getNodePair().second->getUserId() == p2->getNodePair().second->getUserId(); } } // namespace CXXGraph diff --git a/test/GraphTest.cpp b/test/GraphTest.cpp index 690ec4900..6ab495087 100644 --- a/test/GraphTest.cpp +++ b/test/GraphTest.cpp @@ -168,6 +168,8 @@ TEST(GraphTest, DirectedEdgeCycle_1) { CXXGraph::DirectedEdge edge2(1, node2, node1); CXXGraph::DirectedEdge edge3(2, node3, node1); + CXXGraph::Graph graph; + graph.addEdge(&edge1); graph.addEdge(&edge2); graph.addEdge(&edge3); @@ -217,8 +219,6 @@ TEST(GraphTest, DirectedEdge_hashequality) { CXXGraph::DirectedEdge edge10(10, node6, node2); CXXGraph::DirectedEdge edge11(11, node7, node2); - CXXGraph::Graph graph; - CXXGraph::T_EdgeSet edges; auto addEdge = [&](CXXGraph::DirectedEdge& edge) { @@ -233,18 +233,19 @@ TEST(GraphTest, DirectedEdge_hashequality) { } }; - addEdge(&edge1); - addEdge(&edge2); - addEdge(&edge3); - addEdge(&edge4); - addEdge(&edge5); - addEdge(&edge6); - addEdge(&edge7); - addEdge(&edge8); - addEdge(&edge9); - addEdge(&edge10); - addEdge(&edge11); + addEdge(edge1); + addEdge(edge2); + addEdge(edge3); + addEdge(edge4); + addEdge(edge5); + addEdge(edge6); + addEdge(edge7); + addEdge(edge8); + addEdge(edge9); + addEdge(edge10); + addEdge(edge11); + CXXGraph::Graph graph; graph.setEdgeSet(edges); // Check that all of the edges have been added to the graph