diff --git a/CMakeLists.txt b/CMakeLists.txt index 8135ce0d9..6ea6b9320 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,30 +41,10 @@ endif(CODE_COVERAGE) # add the library -add_executable(test_exe test/main.cpp - test/NodeTest.cpp - test/EdgeTest.cpp - test/DirectedEdgeTest.cpp - test/UndirectedEdgeTest.cpp - test/DirectedWeightedEdgeTest.cpp - test/UndirectedWeightedEdgeTest.cpp - test/GraphTest.cpp - test/DijkstraTest.cpp - test/BellmanFordTest.cpp - test/FWTest.cpp - test/PrimTest.cpp - test/BoruvkaTest.cpp - test/KruskalTest.cpp - test/BFSTest.cpp - test/DFSTest.cpp - test/CycleCheckTest.cpp - test/RWOutputTest.cpp - test/PartitionTest.cpp - test/DialTest.cpp - test/GraphSlicingTest.cpp - test/UnionFindTest.cpp - test/EulerPathTest.cpp - ) +file (GLOB TEST_FILES "test/*.cpp" "test/*.hpp") + +add_executable(test_exe ${TEST_FILES}) + target_include_directories(test_exe PUBLIC "${PROJECT_SOURCE_DIR}/include" ) @@ -96,12 +76,9 @@ add_test(test_dial test_exe --gtest_filter=DialTest*) option(BENCHMARK "Enable Benchmark" OFF) if(BENCHMARK) - add_executable(benchmark benchmark/Utilities.hpp - benchmark/Node_BM.cpp - benchmark/Edge_BM.cpp - benchmark/Graph_BM.cpp - benchmark/FloydWarshall_BM.cpp - ) + + file (GLOB BENCHMARK_FILES "benchmark/*.cpp" "benchmark/*.hpp") + add_executable(benchmark ${BENCHMARK_FILES}) target_include_directories(benchmark PUBLIC "${PROJECT_SOURCE_DIR}/include" ) diff --git a/include/Graph/Graph.hpp b/include/Graph/Graph.hpp index 8410022ef..6b60bee81 100644 --- a/include/Graph/Graph.hpp +++ b/include/Graph/Graph.hpp @@ -1266,7 +1266,7 @@ namespace CXXGRAPH result.errorMessage = ERR_DIR_GRAPH; return result; } - if(!isConnectedGraph()) + if (!isConnectedGraph()) { result.errorMessage = ERR_NOT_STRONG_CONNECTED; return result; @@ -1822,7 +1822,7 @@ namespace CXXGRAPH template bool Graph::isConnectedGraph() const { - if (isDirectedGraph()) + if (!isUndirectedGraph()) { return false; } @@ -1870,7 +1870,7 @@ namespace CXXGRAPH template bool Graph::isStronglyConnectedGraph() const { - if (isUndirectedGraph()) + if (!isDirectedGraph()) { return false; } @@ -1878,37 +1878,40 @@ namespace CXXGRAPH { auto nodeSet = getNodeSet(); auto adjMatrix = getAdjMatrix(); - // created visited map - std::unordered_map visited; - for (const auto &node : nodeSet) - { - visited[node->getId()] = false; - } - std::function *)> dfs_helper = [this, &adjMatrix, &visited, &dfs_helper](const Node *source) + for (const auto &start_node : nodeSet) { - // mark the vertex visited - visited[source->getId()] = true; - - // travel the neighbors - for (int i = 0; i < adjMatrix[source].size(); i++) + // created visited map + std::unordered_map visited; + for (const auto &node : nodeSet) { - const Node *neighbor = adjMatrix[source].at(i).first; - if (visited[neighbor->getId()] == false) + visited[node->getId()] = false; + } + std::function *)> dfs_helper = [this, &adjMatrix, &visited, &dfs_helper](const Node *source) + { + // mark the vertex visited + visited[source->getId()] = true; + + // travel the neighbors + for (int i = 0; i < adjMatrix[source].size(); i++) { - // make recursive call from neighbor - dfs_helper(neighbor); + const Node *neighbor = adjMatrix[source].at(i).first; + if (visited[neighbor->getId()] == false) + { + // make recursive call from neighbor + dfs_helper(neighbor); + } } - } - }; - // call dfs_helper for the first node - dfs_helper(nodeSet.front()); + }; + // call dfs_helper for the first node + dfs_helper(start_node); - // check if all the nodes are visited - for (const auto &node : nodeSet) - { - if (visited[node->getId()] == false) + // check if all the nodes are visited + for (const auto &node : nodeSet) { - return false; + if (visited[node->getId()] == false) + { + return false; + } } } return true; diff --git a/test/ConnectivityTest.cpp b/test/ConnectivityTest.cpp new file mode 100644 index 000000000..a5e6036d6 --- /dev/null +++ b/test/ConnectivityTest.cpp @@ -0,0 +1,433 @@ +#include "gtest/gtest.h" +#include "CXXGraph.hpp" + +TEST(ConnectivityTest, test_1) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::UndirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::UndirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::UndirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::UndirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::UndirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::UndirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::UndirectedWeightedEdge edge7(3, node8, node2, 2); + CXXGRAPH::UndirectedWeightedEdge edge8(3, node8, node6, 6); + CXXGRAPH::UndirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::UndirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::UndirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::UndirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::UndirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::UndirectedWeightedEdge edge14(3, node5, node4, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge7); + edgeSet.push_back(&edge8); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_TRUE(graph.isConnectedGraph()); +} + +TEST(ConnectivityTest, test_2) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::UndirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::UndirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::UndirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::UndirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::UndirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::UndirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::UndirectedWeightedEdge edge7(3, node8, node2, 2); + CXXGRAPH::UndirectedWeightedEdge edge8(3, node8, node6, 6); + CXXGRAPH::UndirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::UndirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::UndirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::UndirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::UndirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::UndirectedWeightedEdge edge14(3, node5, node4, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge7); + edgeSet.push_back(&edge8); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_FALSE(graph.isStronglyConnectedGraph()); +} + +TEST(ConnectivityTest, test_3) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::DirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::DirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::DirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::DirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::DirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::DirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::DirectedWeightedEdge edge7(3, node8, node2, 2); + CXXGRAPH::DirectedWeightedEdge edge8(3, node8, node6, 6); + CXXGRAPH::DirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::DirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::DirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::DirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::DirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::DirectedWeightedEdge edge14(3, node5, node4, 10); + CXXGRAPH::DirectedWeightedEdge edge15(3, node1, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge16(3, node2, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge17(3, node3, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge18(3, node4, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge19(3, node5, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge20(3, node6, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge21(3, node7, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge22(3, node8, node0, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge7); + edgeSet.push_back(&edge8); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + edgeSet.push_back(&edge15); + edgeSet.push_back(&edge16); + edgeSet.push_back(&edge17); + edgeSet.push_back(&edge18); + edgeSet.push_back(&edge19); + edgeSet.push_back(&edge20); + edgeSet.push_back(&edge21); + edgeSet.push_back(&edge22); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_TRUE(graph.isStronglyConnectedGraph()); +} + +TEST(ConnectivityTest, test_4) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::DirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::DirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::DirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::DirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::DirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::DirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::DirectedWeightedEdge edge7(3, node8, node2, 2); + CXXGRAPH::DirectedWeightedEdge edge8(3, node8, node6, 6); + CXXGRAPH::DirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::DirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::DirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::DirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::DirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::DirectedWeightedEdge edge14(3, node5, node4, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge7); + edgeSet.push_back(&edge8); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_FALSE(graph.isConnectedGraph()); +} +///////////////////////////////////////////////////////// +// Not a possible test until not implemented addNode function. All the undirected graph can be only connected with this interface. +/* +TEST(ConnectivityTest, test_5) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::UndirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::UndirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::UndirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::UndirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::UndirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::UndirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::UndirectedWeightedEdge edge7(3, node8, node2, 2); + CXXGRAPH::UndirectedWeightedEdge edge8(3, node8, node6, 6); + CXXGRAPH::UndirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::UndirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::UndirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::UndirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::UndirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::UndirectedWeightedEdge edge14(3, node5, node4, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge7); + edgeSet.push_back(&edge8); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_FALSE(graph.isConnectedGraph()); + +} +*/ +//////////////////////////////////////////////////////////////////// + +TEST(ConnectivityTest, test_6) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::DirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::DirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::DirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::DirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::DirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::DirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::DirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::DirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::DirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::DirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::DirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::DirectedWeightedEdge edge14(3, node5, node4, 10); + CXXGRAPH::DirectedWeightedEdge edge15(3, node1, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge16(3, node2, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge17(3, node3, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge18(3, node4, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge19(3, node5, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge20(3, node6, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge21(3, node7, node0, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + edgeSet.push_back(&edge15); + edgeSet.push_back(&edge16); + edgeSet.push_back(&edge17); + edgeSet.push_back(&edge18); + edgeSet.push_back(&edge19); + edgeSet.push_back(&edge20); + edgeSet.push_back(&edge21); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_FALSE(graph.isStronglyConnectedGraph()); +} + +TEST(ConnectivityTest, test_7) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::DirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::UndirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::UndirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::UndirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::UndirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::UndirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::UndirectedWeightedEdge edge7(3, node8, node2, 2); + CXXGRAPH::UndirectedWeightedEdge edge8(3, node8, node6, 6); + CXXGRAPH::UndirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::UndirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::UndirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::UndirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::UndirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::UndirectedWeightedEdge edge14(3, node5, node4, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge7); + edgeSet.push_back(&edge8); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_FALSE(graph.isConnectedGraph()); +} + +TEST(ConnectivityTest, test_8) +{ + CXXGRAPH::Node node0("0", 0); + CXXGRAPH::Node node1("1", 1); + CXXGRAPH::Node node2("2", 2); + CXXGRAPH::Node node3("3", 3); + CXXGRAPH::Node node4("4", 4); + CXXGRAPH::Node node5("5", 5); + CXXGRAPH::Node node6("6", 6); + CXXGRAPH::Node node7("7", 7); + CXXGRAPH::Node node8("8", 8); + + CXXGRAPH::UndirectedWeightedEdge edge1(1, node0, node1, 4); + CXXGRAPH::DirectedWeightedEdge edge2(2, node0, node7, 8); + CXXGRAPH::DirectedWeightedEdge edge3(3, node1, node7, 11); + CXXGRAPH::DirectedWeightedEdge edge4(3, node1, node2, 8); + CXXGRAPH::DirectedWeightedEdge edge5(4, node7, node8, 7); + CXXGRAPH::DirectedWeightedEdge edge6(3, node7, node6, 1); + CXXGRAPH::DirectedWeightedEdge edge7(3, node8, node2, 2); + CXXGRAPH::DirectedWeightedEdge edge8(3, node8, node6, 6); + CXXGRAPH::DirectedWeightedEdge edge9(3, node2, node5, 4); + CXXGRAPH::DirectedWeightedEdge edge10(3, node2, node3, 7); + CXXGRAPH::DirectedWeightedEdge edge11(3, node6, node5, 2); + CXXGRAPH::DirectedWeightedEdge edge12(3, node3, node4, 9); + CXXGRAPH::DirectedWeightedEdge edge13(3, node3, node5, 14); + CXXGRAPH::DirectedWeightedEdge edge14(3, node5, node4, 10); + CXXGRAPH::DirectedWeightedEdge edge15(3, node1, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge16(3, node2, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge17(3, node3, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge18(3, node4, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge19(3, node5, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge20(3, node6, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge21(3, node7, node0, 10); + CXXGRAPH::DirectedWeightedEdge edge22(3, node8, node0, 10); + + std::list *> edgeSet; + edgeSet.push_back(&edge1); + edgeSet.push_back(&edge2); + edgeSet.push_back(&edge3); + edgeSet.push_back(&edge4); + edgeSet.push_back(&edge5); + edgeSet.push_back(&edge6); + edgeSet.push_back(&edge7); + edgeSet.push_back(&edge8); + edgeSet.push_back(&edge9); + edgeSet.push_back(&edge10); + edgeSet.push_back(&edge11); + edgeSet.push_back(&edge12); + edgeSet.push_back(&edge13); + edgeSet.push_back(&edge14); + edgeSet.push_back(&edge15); + edgeSet.push_back(&edge16); + edgeSet.push_back(&edge17); + edgeSet.push_back(&edge18); + edgeSet.push_back(&edge19); + edgeSet.push_back(&edge20); + edgeSet.push_back(&edge21); + edgeSet.push_back(&edge22); + + CXXGRAPH::Graph graph(edgeSet); + + ASSERT_FALSE(graph.isStronglyConnectedGraph()); +} \ No newline at end of file