From c2422eb231b0717572ec0f528f1296a514c750c3 Mon Sep 17 00:00:00 2001 From: David Xchel Morales Hurtado Date: Mon, 13 Jul 2026 21:00:29 -0600 Subject: [PATCH 1/4] Added a Cycle detection test with big graph - Uses a graph with 2001000 nodes - Checks with Tree-like graph - Uses same structure with a last edge that creates a cycle --- test/CycleCheckTest.cpp | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/test/CycleCheckTest.cpp b/test/CycleCheckTest.cpp index d200007ac..6eeadf1e8 100644 --- a/test/CycleCheckTest.cpp +++ b/test/CycleCheckTest.cpp @@ -1,4 +1,7 @@ #include +#include +#include +#include #include "CXXGraph/CXXGraph.hpp" #include "gtest/gtest.h" @@ -9,6 +12,7 @@ using unique = std::unique_ptr; template using shared = std::shared_ptr; +using std::shared_ptr; using std::make_shared; using std::make_unique; @@ -151,3 +155,46 @@ TEST(CycleCheckTest, test_8) { bool res = graph.isCyclicDirectedGraphBFS(); ASSERT_EQ(res, true); } + +TEST(CycleCheckTest, test_2001000) { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution distrib(1, 100); + + std::vector> nodes; + std::vector> edges; + nodes.reserve(2001000); + edges.reserve(2001000); + CXXGraph::T_EdgeSet edgeSet; + int node_i = 1; + int edge_i = 1; + + /* + * Creates a Tree Graph with a root node in which each level + * has one more node than the previous one, having in the end + * 2000*2001/2 = 2001000 nodes the form looks as follows: + * node1-node2 + * |-node3-node4 + * |-node5 + * |-node6... + */ + CXXGraph::Node node(std::to_string(node_i), node_i); + nodes.push_back(node); + node_i++; + for (int i = 2; i < 2001; i++) { + for (int j = 0; j < i; j++) { + auto last_i_node = nodes.back(); + CXXGraph::Node node(std::to_string(node_i), node_i); + nodes.push_back(node); + node_i++; + CXXGraph::DirectedWeightedEdge edge(std::to_string(edge_i++), last_i_node, nodes.back(), distrib(gen)); + edgeSet.insert(make_shared>(edge)); + } + } + CXXGraph::Graph graph_tree(edgeSet); + ASSERT_EQ(graph_tree.isCyclicDirectedGraphBFS(), false); + CXXGraph::DirectedWeightedEdge edge(std::to_string(edge_i++), nodes.back(), nodes.front(), distrib(gen)); + edgeSet.insert(make_shared>(edge)); + CXXGraph::Graph graph_cycle(edgeSet); + ASSERT_EQ(graph_cycle.isCyclicDirectedGraphBFS(), true); +} From 61116f95690a7385e503f40c6aa569573ed24cee Mon Sep 17 00:00:00 2001 From: David Xchel Morales Hurtado Date: Mon, 13 Jul 2026 21:03:04 -0600 Subject: [PATCH 2/4] Added missing cstdint library on Graph_decl.h --- include/CXXGraph/Graph/Graph_decl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/CXXGraph/Graph/Graph_decl.h b/include/CXXGraph/Graph/Graph_decl.h index 8488a3d98..d56790f4c 100644 --- a/include/CXXGraph/Graph/Graph_decl.h +++ b/include/CXXGraph/Graph/Graph_decl.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include From c402e945ff55595a6e63c15da2f8370befd0e69c Mon Sep 17 00:00:00 2001 From: David Xchel Morales Hurtado Date: Mon, 13 Jul 2026 21:58:51 -0600 Subject: [PATCH 3/4] Added move semantics for better performance --- test/CycleCheckTest.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/CycleCheckTest.cpp b/test/CycleCheckTest.cpp index 6eeadf1e8..2f2302a17 100644 --- a/test/CycleCheckTest.cpp +++ b/test/CycleCheckTest.cpp @@ -179,22 +179,22 @@ TEST(CycleCheckTest, test_2001000) { * |-node6... */ CXXGraph::Node node(std::to_string(node_i), node_i); - nodes.push_back(node); + nodes.push_back(std::move(node)); node_i++; for (int i = 2; i < 2001; i++) { for (int j = 0; j < i; j++) { auto last_i_node = nodes.back(); CXXGraph::Node node(std::to_string(node_i), node_i); - nodes.push_back(node); + nodes.push_back(std::move(node)); node_i++; CXXGraph::DirectedWeightedEdge edge(std::to_string(edge_i++), last_i_node, nodes.back(), distrib(gen)); - edgeSet.insert(make_shared>(edge)); + edgeSet.insert(make_shared>(std::move(edge))); } } CXXGraph::Graph graph_tree(edgeSet); ASSERT_EQ(graph_tree.isCyclicDirectedGraphBFS(), false); CXXGraph::DirectedWeightedEdge edge(std::to_string(edge_i++), nodes.back(), nodes.front(), distrib(gen)); - edgeSet.insert(make_shared>(edge)); - CXXGraph::Graph graph_cycle(edgeSet); + edgeSet.insert(make_shared>(std::move(edge))); + CXXGraph::Graph graph_cycle(std::move(edgeSet)); ASSERT_EQ(graph_cycle.isCyclicDirectedGraphBFS(), true); } From 1d7b92b828864a3ea188e97f44dcea1c522d7908 Mon Sep 17 00:00:00 2001 From: David Xchel Morales Hurtado <123974833+dxchel@users.noreply.github.com> Date: Sat, 18 Jul 2026 22:34:37 -0600 Subject: [PATCH 4/4] Small comment change Comment changed to rerun PR workflow --- test/CycleCheckTest.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/CycleCheckTest.cpp b/test/CycleCheckTest.cpp index 2f2302a17..28abaa790 100644 --- a/test/CycleCheckTest.cpp +++ b/test/CycleCheckTest.cpp @@ -173,10 +173,9 @@ TEST(CycleCheckTest, test_2001000) { * Creates a Tree Graph with a root node in which each level * has one more node than the previous one, having in the end * 2000*2001/2 = 2001000 nodes the form looks as follows: - * node1-node2 - * |-node3-node4 - * |-node5 - * |-node6... + * node1---node3---node6... + * |-node2 |-node5 + * |-node4 */ CXXGraph::Node node(std::to_string(node_i), node_i); nodes.push_back(std::move(node));