From f98b54cf560e8c5426e0090e0bc486927324dd20 Mon Sep 17 00:00:00 2001 From: ZigRazor Date: Mon, 2 Dec 2024 15:57:14 +0100 Subject: [PATCH] Benchmark_update (#480) * Added complexity to benchmark * Added function for get NodeVector and EdgeVector --- benchmark/BFS_BM.cpp | 21 ++++++++------- benchmark/BellmanFord_BM.cpp | 5 ++-- benchmark/Boruvka_BM.cpp | 8 +++--- benchmark/Connectivity_BM.cpp | 10 ++++--- benchmark/CycleCheck_BM.cpp | 10 ++++--- benchmark/DFS_BM.cpp | 8 +++--- benchmark/Dial_BM.cpp | 8 +++--- benchmark/Dijkstra_BM.cpp | 5 ++-- benchmark/Edge_BM.cpp | 8 +++--- benchmark/EulerPath_BM.cpp | 3 ++- benchmark/FloydWarshall_BM.cpp | 8 +++--- benchmark/FordFulkerson_BM.cpp | 5 ++-- benchmark/GraphSlicing_BM.cpp | 3 ++- benchmark/Graph_BM.cpp | 27 +++++++++++-------- benchmark/Kosaraju_BM.cpp | 5 ++-- benchmark/Kruskal_BM.cpp | 8 +++--- benchmark/Node_BM.cpp | 8 +++--- benchmark/Partition_BM.cpp | 20 ++++++++------ benchmark/Prim_BM.cpp | 8 +++--- benchmark/TopologicalSort_BM.cpp | 5 ++-- .../Algorithm/BreadthFirstSearch_impl.hpp | 2 +- .../Graph/Algorithm/DepthFirstSearch_impl.hpp | 4 +-- include/CXXGraph/Graph/Graph_decl.h | 27 +++++++++++++++++++ include/CXXGraph/Graph/Graph_impl.hpp | 17 ++++++++++++ 24 files changed, 155 insertions(+), 78 deletions(-) diff --git a/benchmark/BFS_BM.cpp b/benchmark/BFS_BM.cpp index 7bdbed455..57948d042 100644 --- a/benchmark/BFS_BM.cpp +++ b/benchmark/BFS_BM.cpp @@ -17,8 +17,10 @@ static void BFS_X(benchmark::State &state) { g.breadth_first_search(*(range_start->second->getNodePair().first)); } } -BENCHMARK(BFS_X)->RangeMultiplier(18)->Range((unsigned long)1, - (unsigned long)1 << 18); +BENCHMARK(BFS_X) + ->RangeMultiplier(18) + ->Range((unsigned long)1, (unsigned long)1 << 18) + ->Complexity(); static void BFS_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -28,7 +30,7 @@ static void BFS_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(BFS_FromReadedCitHep); +BENCHMARK(BFS_FromReadedCitHep)->Complexity(); static void PSEUDO_CONCURRENCY_BFS_X(benchmark::State &state) { CXXGraph::Graph g; @@ -46,7 +48,8 @@ static void PSEUDO_CONCURRENCY_BFS_X(benchmark::State &state) { } BENCHMARK(PSEUDO_CONCURRENCY_BFS_X) ->RangeMultiplier(18) - ->Range((unsigned long)1, (unsigned long)1 << 18); + ->Range((unsigned long)1, (unsigned long)1 << 18) + ->Complexity(); static void PSEUDO_CONCURRENCY_BFS_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -56,7 +59,7 @@ static void PSEUDO_CONCURRENCY_BFS_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(PSEUDO_CONCURRENCY_BFS_FromReadedCitHep); +BENCHMARK(PSEUDO_CONCURRENCY_BFS_FromReadedCitHep)->Complexity(); static void CONCURRENCY_BFS_X(benchmark::State &state) { CXXGraph::Graph g; @@ -72,9 +75,9 @@ static void CONCURRENCY_BFS_X(benchmark::State &state) { *(range_start->second->getNodePair().first), 8); } } -BENCHMARK(CONCURRENCY_BFS_X) - ->RangeMultiplier(18) - ->Range((unsigned long)1, (unsigned long)1 << 18); +// BENCHMARK(CONCURRENCY_BFS_X) +// ->RangeMultiplier(18) +// ->Range((unsigned long)1, (unsigned long)1 << 18); static void CONCURRENCY_BFS_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -84,4 +87,4 @@ static void CONCURRENCY_BFS_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(CONCURRENCY_BFS_FromReadedCitHep); +// BENCHMARK(CONCURRENCY_BFS_FromReadedCitHep); diff --git a/benchmark/BellmanFord_BM.cpp b/benchmark/BellmanFord_BM.cpp index 8573b894b..d7569e45c 100644 --- a/benchmark/BellmanFord_BM.cpp +++ b/benchmark/BellmanFord_BM.cpp @@ -19,7 +19,8 @@ static void BellmanFord_X(benchmark::State &state) { } BENCHMARK(BellmanFord_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void BellmanFord_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -30,4 +31,4 @@ static void BellmanFord_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(BellmanFord_FromReadedCitHep); +BENCHMARK(BellmanFord_FromReadedCitHep)->Complexity(); diff --git a/benchmark/Boruvka_BM.cpp b/benchmark/Boruvka_BM.cpp index 2d5d77ae4..770906923 100644 --- a/benchmark/Boruvka_BM.cpp +++ b/benchmark/Boruvka_BM.cpp @@ -16,8 +16,10 @@ static void Boruvka_X(benchmark::State &state) { auto &result = g.boruvka(); } } -BENCHMARK(Boruvka_X)->RangeMultiplier(16)->Range((unsigned long)1, - (unsigned long)1 << 16); +BENCHMARK(Boruvka_X) + ->RangeMultiplier(16) + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void Boruvka_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -26,4 +28,4 @@ static void Boruvka_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(Boruvka_FromReadedCitHep); +BENCHMARK(Boruvka_FromReadedCitHep)->Complexity(); diff --git a/benchmark/Connectivity_BM.cpp b/benchmark/Connectivity_BM.cpp index 234e9111c..8035c4870 100644 --- a/benchmark/Connectivity_BM.cpp +++ b/benchmark/Connectivity_BM.cpp @@ -18,7 +18,8 @@ static void Connectivity_X(benchmark::State &state) { } BENCHMARK(Connectivity_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void Connectivity_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -27,7 +28,7 @@ static void Connectivity_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(Connectivity_FromReadedCitHep); +BENCHMARK(Connectivity_FromReadedCitHep)->Complexity(); static void StrongConnectivity_X(benchmark::State &state) { CXXGraph::Graph g; @@ -44,7 +45,8 @@ static void StrongConnectivity_X(benchmark::State &state) { } BENCHMARK(StrongConnectivity_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void StrongConnectivity_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -53,4 +55,4 @@ static void StrongConnectivity_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(StrongConnectivity_FromReadedCitHep); +BENCHMARK(StrongConnectivity_FromReadedCitHep)->Complexity(); diff --git a/benchmark/CycleCheck_BM.cpp b/benchmark/CycleCheck_BM.cpp index 93a0f43c9..efb3dc1d5 100644 --- a/benchmark/CycleCheck_BM.cpp +++ b/benchmark/CycleCheck_BM.cpp @@ -18,7 +18,8 @@ static void CycleCheckBFS_X(benchmark::State &state) { } BENCHMARK(CycleCheckBFS_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void CycleCheckBFS_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -27,7 +28,7 @@ static void CycleCheckBFS_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(CycleCheckBFS_FromReadedCitHep); +BENCHMARK(CycleCheckBFS_FromReadedCitHep)->Complexity(); static void CycleCheckDFS_X(benchmark::State &state) { CXXGraph::Graph g; @@ -44,7 +45,8 @@ static void CycleCheckDFS_X(benchmark::State &state) { } BENCHMARK(CycleCheckDFS_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void CycleCheckDFS_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -53,4 +55,4 @@ static void CycleCheckDFS_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(CycleCheckDFS_FromReadedCitHep); +BENCHMARK(CycleCheckDFS_FromReadedCitHep)->Complexity(); diff --git a/benchmark/DFS_BM.cpp b/benchmark/DFS_BM.cpp index 478a33ae5..27ccb5668 100644 --- a/benchmark/DFS_BM.cpp +++ b/benchmark/DFS_BM.cpp @@ -18,8 +18,10 @@ static void DFS_X(benchmark::State &state) { } } -BENCHMARK(DFS_X)->RangeMultiplier(16)->Range((unsigned long)1, - (unsigned long)1 << 16); +BENCHMARK(DFS_X) + ->RangeMultiplier(16) + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void DFS_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -29,4 +31,4 @@ static void DFS_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(DFS_FromReadedCitHep); +BENCHMARK(DFS_FromReadedCitHep)->Complexity(); diff --git a/benchmark/Dial_BM.cpp b/benchmark/Dial_BM.cpp index b70c653c5..769549b1c 100644 --- a/benchmark/Dial_BM.cpp +++ b/benchmark/Dial_BM.cpp @@ -16,8 +16,10 @@ static void Dial_X(benchmark::State &state) { auto &result = g.dial(*(range_start->second->getNodePair().first), 1); } } -BENCHMARK(Dial_X)->RangeMultiplier(16)->Range((unsigned long)1, - (unsigned long)1 << 16); +BENCHMARK(Dial_X) + ->RangeMultiplier(16) + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void Dial_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -27,4 +29,4 @@ static void Dial_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(Dial_FromReadedCitHep); +BENCHMARK(Dial_FromReadedCitHep)->Complexity(); diff --git a/benchmark/Dijkstra_BM.cpp b/benchmark/Dijkstra_BM.cpp index 1ffaf6964..1adb5a04e 100644 --- a/benchmark/Dijkstra_BM.cpp +++ b/benchmark/Dijkstra_BM.cpp @@ -19,7 +19,8 @@ static void Dijkstra_X(benchmark::State &state) { } BENCHMARK(Dijkstra_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void Dijkstra_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -30,4 +31,4 @@ static void Dijkstra_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(Dijkstra_FromReadedCitHep); +BENCHMARK(Dijkstra_FromReadedCitHep)->Complexity(); diff --git a/benchmark/Edge_BM.cpp b/benchmark/Edge_BM.cpp index 95f8e0cfa..68856f200 100644 --- a/benchmark/Edge_BM.cpp +++ b/benchmark/Edge_BM.cpp @@ -12,7 +12,7 @@ static void BM_EdgeCreation(benchmark::State &state) { } } -BENCHMARK(BM_EdgeCreation); +BENCHMARK(BM_EdgeCreation)->Complexity(); static void EdgeCreationDestruction_new_delete(benchmark::State &state) { auto nodes = generateRandomNodes(2, 2); @@ -25,7 +25,7 @@ static void EdgeCreationDestruction_new_delete(benchmark::State &state) { } } -BENCHMARK(EdgeCreationDestruction_new_delete); +BENCHMARK(EdgeCreationDestruction_new_delete)->Complexity(); static void EdgeGetId(benchmark::State &state) { auto nodes = generateRandomNodes(2, 2); @@ -36,7 +36,7 @@ static void EdgeGetId(benchmark::State &state) { e.getId(); } } -BENCHMARK(EdgeGetId); +BENCHMARK(EdgeGetId)->Complexity(); static void NodeGetNodePair(benchmark::State &state) { auto nodes = generateRandomNodes(2, 2); @@ -47,4 +47,4 @@ static void NodeGetNodePair(benchmark::State &state) { e.getNodePair(); } } -BENCHMARK(NodeGetNodePair); +BENCHMARK(NodeGetNodePair)->Complexity(); diff --git a/benchmark/EulerPath_BM.cpp b/benchmark/EulerPath_BM.cpp index 4a573a697..c23b24dd3 100644 --- a/benchmark/EulerPath_BM.cpp +++ b/benchmark/EulerPath_BM.cpp @@ -18,4 +18,5 @@ static void EulerPath_X(benchmark::State &state) { } BENCHMARK(EulerPath_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); diff --git a/benchmark/FloydWarshall_BM.cpp b/benchmark/FloydWarshall_BM.cpp index 127d8c49d..d61616ac0 100644 --- a/benchmark/FloydWarshall_BM.cpp +++ b/benchmark/FloydWarshall_BM.cpp @@ -32,7 +32,7 @@ static void BM_FWDirected(benchmark::State &state) { CXXGraph::FWResult res = graph.floydWarshall(); } } -BENCHMARK(BM_FWDirected); +BENCHMARK(BM_FWDirected)->Complexity(); // a graph with negative cycle static void BM_FWNegCycle(benchmark::State &state) { @@ -51,7 +51,7 @@ static void BM_FWNegCycle(benchmark::State &state) { CXXGraph::FWResult res = graph.floydWarshall(); } } -BENCHMARK(BM_FWNegCycle); +BENCHMARK(BM_FWNegCycle)->Complexity(); static void BM_FWUndirectedWeighted(benchmark::State &state) { CXXGraph::Node node1("1", 1); @@ -71,7 +71,7 @@ static void BM_FWUndirectedWeighted(benchmark::State &state) { CXXGraph::FWResult res = graph.floydWarshall(); } } -BENCHMARK(BM_FWUndirectedWeighted); +BENCHMARK(BM_FWUndirectedWeighted)->Complexity(); static void BM_FWNoWeighted(benchmark::State &state) { CXXGraph::Node node1("1", 1); @@ -92,4 +92,4 @@ static void BM_FWNoWeighted(benchmark::State &state) { } } -BENCHMARK(BM_FWNoWeighted); +BENCHMARK(BM_FWNoWeighted)->Complexity(); diff --git a/benchmark/FordFulkerson_BM.cpp b/benchmark/FordFulkerson_BM.cpp index 6afd9699d..3d2b17fbb 100644 --- a/benchmark/FordFulkerson_BM.cpp +++ b/benchmark/FordFulkerson_BM.cpp @@ -20,7 +20,8 @@ static void FordFulkerson_X(benchmark::State &state) { } BENCHMARK(FordFulkerson_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void FordFulkerson_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -31,4 +32,4 @@ static void FordFulkerson_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(FordFulkerson_FromReadedCitHep); +BENCHMARK(FordFulkerson_FromReadedCitHep)->Complexity(); diff --git a/benchmark/GraphSlicing_BM.cpp b/benchmark/GraphSlicing_BM.cpp index d062c7769..fe4a81e08 100644 --- a/benchmark/GraphSlicing_BM.cpp +++ b/benchmark/GraphSlicing_BM.cpp @@ -18,4 +18,5 @@ static void GraphSlicing_X(benchmark::State &state) { } BENCHMARK(GraphSlicing_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 8); + ->Range((unsigned long)1, (unsigned long)1 << 8) + ->Complexity(); diff --git a/benchmark/Graph_BM.cpp b/benchmark/Graph_BM.cpp index 89b5980ff..d79111215 100644 --- a/benchmark/Graph_BM.cpp +++ b/benchmark/Graph_BM.cpp @@ -11,7 +11,7 @@ static void GraphCreation(benchmark::State &state) { } } -BENCHMARK(GraphCreation); +BENCHMARK(GraphCreation)->Complexity(); static void AddEdge(benchmark::State &state) { CXXGraph::Graph g; @@ -22,7 +22,7 @@ static void AddEdge(benchmark::State &state) { g.addEdge(&e); } } -BENCHMARK(AddEdge); +BENCHMARK(AddEdge)->Complexity(); static void AddEdgeX(benchmark::State &state) { CXXGraph::Graph g; @@ -36,8 +36,10 @@ static void AddEdgeX(benchmark::State &state) { } } } -BENCHMARK(AddEdgeX)->RangeMultiplier(16)->Range((unsigned long)1, - (unsigned long)1 << 16); +BENCHMARK(AddEdgeX) + ->RangeMultiplier(16) + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void ReadGraphCitHep(benchmark::State &state) { for (auto _ : state) { @@ -46,7 +48,7 @@ static void ReadGraphCitHep(benchmark::State &state) { } } -BENCHMARK(ReadGraphCitHep); +BENCHMARK(ReadGraphCitHep)->Complexity(); static void getEdgeSetX(benchmark::State &state) { CXXGraph::Graph g; @@ -64,7 +66,8 @@ static void getEdgeSetX(benchmark::State &state) { BENCHMARK(getEdgeSetX) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void getNodeSetX(benchmark::State &state) { CXXGraph::Graph g; @@ -82,7 +85,8 @@ static void getNodeSetX(benchmark::State &state) { BENCHMARK(getNodeSetX) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void getEdgeSetCitHep(benchmark::State &state) { for (auto _ : state) { @@ -90,7 +94,7 @@ static void getEdgeSetCitHep(benchmark::State &state) { } } -BENCHMARK(getEdgeSetCitHep); +BENCHMARK(getEdgeSetCitHep)->Complexity(); static void getNodeSetCitHep(benchmark::State &state) { for (auto _ : state) { @@ -98,7 +102,7 @@ static void getNodeSetCitHep(benchmark::State &state) { } } -BENCHMARK(getNodeSetCitHep); +BENCHMARK(getNodeSetCitHep)->Complexity(); static void getAdjMatrixX(benchmark::State &state) { CXXGraph::Graph g; @@ -116,7 +120,8 @@ static void getAdjMatrixX(benchmark::State &state) { BENCHMARK(getAdjMatrixX) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void getAdjMatrixCitHep(benchmark::State &state) { for (auto _ : state) { @@ -124,4 +129,4 @@ static void getAdjMatrixCitHep(benchmark::State &state) { } } -BENCHMARK(getAdjMatrixCitHep); +BENCHMARK(getAdjMatrixCitHep)->Complexity(); diff --git a/benchmark/Kosaraju_BM.cpp b/benchmark/Kosaraju_BM.cpp index 5e6039b3a..2710c1bfd 100644 --- a/benchmark/Kosaraju_BM.cpp +++ b/benchmark/Kosaraju_BM.cpp @@ -18,7 +18,8 @@ static void Kosaraju_X(benchmark::State &state) { } BENCHMARK(Kosaraju_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void Kosaraju_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -27,4 +28,4 @@ static void Kosaraju_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(Kosaraju_FromReadedCitHep); \ No newline at end of file +BENCHMARK(Kosaraju_FromReadedCitHep)->Complexity(); \ No newline at end of file diff --git a/benchmark/Kruskal_BM.cpp b/benchmark/Kruskal_BM.cpp index a6d29fa0e..61e0766df 100644 --- a/benchmark/Kruskal_BM.cpp +++ b/benchmark/Kruskal_BM.cpp @@ -16,8 +16,10 @@ static void Kruskal_X(benchmark::State &state) { auto &result = g.kruskal(); } } -BENCHMARK(Kruskal_X)->RangeMultiplier(16)->Range((unsigned long)1, - (unsigned long)1 << 16); +BENCHMARK(Kruskal_X) + ->RangeMultiplier(16) + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void Kruskal_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -26,4 +28,4 @@ static void Kruskal_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(Kruskal_FromReadedCitHep); +BENCHMARK(Kruskal_FromReadedCitHep)->Complexity(); diff --git a/benchmark/Node_BM.cpp b/benchmark/Node_BM.cpp index a1604c20b..b6619c731 100644 --- a/benchmark/Node_BM.cpp +++ b/benchmark/Node_BM.cpp @@ -8,7 +8,7 @@ static void NodeCreation(benchmark::State &state) { CXXGraph::Node n1("1", 1); } } -BENCHMARK(NodeCreation); +BENCHMARK(NodeCreation)->Complexity(); static void NodeCreationDestruction_new_delete(benchmark::State &state) { for (auto _ : state) { @@ -17,7 +17,7 @@ static void NodeCreationDestruction_new_delete(benchmark::State &state) { } } -BENCHMARK(NodeCreationDestruction_new_delete); +BENCHMARK(NodeCreationDestruction_new_delete)->Complexity(); static void NodeGetId(benchmark::State &state) { CXXGraph::Node n1("1", 1); @@ -25,7 +25,7 @@ static void NodeGetId(benchmark::State &state) { n1.getId(); } } -BENCHMARK(NodeGetId); +BENCHMARK(NodeGetId)->Complexity(); static void NodeGetData(benchmark::State &state) { CXXGraph::Node n1("1", 1); @@ -33,4 +33,4 @@ static void NodeGetData(benchmark::State &state) { n1.getData(); } } -BENCHMARK(NodeGetData); +BENCHMARK(NodeGetData)->Complexity(); diff --git a/benchmark/Partition_BM.cpp b/benchmark/Partition_BM.cpp index 61b274c1d..11e17830d 100644 --- a/benchmark/Partition_BM.cpp +++ b/benchmark/Partition_BM.cpp @@ -19,7 +19,8 @@ static void PartitionHDRF_X(benchmark::State &state) { } BENCHMARK(PartitionHDRF_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void PartitionHDRF_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -30,7 +31,7 @@ static void PartitionHDRF_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(PartitionHDRF_FromReadedCitHep); +BENCHMARK(PartitionHDRF_FromReadedCitHep)->Complexity(); static void PartitionEBVC_X(benchmark::State &state) { CXXGraph::Graph g; @@ -48,7 +49,8 @@ static void PartitionEBVC_X(benchmark::State &state) { } BENCHMARK(PartitionEBVC_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void PartitionEBVC_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -59,7 +61,7 @@ static void PartitionEBVC_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(PartitionEBVC_FromReadedCitHep); +BENCHMARK(PartitionEBVC_FromReadedCitHep)->Complexity(); static void PartitionGVC_X(benchmark::State &state) { CXXGraph::Graph g; @@ -77,7 +79,8 @@ static void PartitionGVC_X(benchmark::State &state) { } BENCHMARK(PartitionGVC_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void PartitionGVC_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -88,7 +91,7 @@ static void PartitionGVC_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(PartitionGVC_FromReadedCitHep); +BENCHMARK(PartitionGVC_FromReadedCitHep)->Complexity(); static void PartitionEBV_X(benchmark::State &state) { CXXGraph::Graph g; @@ -106,7 +109,8 @@ static void PartitionEBV_X(benchmark::State &state) { } BENCHMARK(PartitionEBV_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void PartitionEBV_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -117,4 +121,4 @@ static void PartitionEBV_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(PartitionEBV_FromReadedCitHep); +BENCHMARK(PartitionEBV_FromReadedCitHep)->Complexity(); diff --git a/benchmark/Prim_BM.cpp b/benchmark/Prim_BM.cpp index 4b1d75682..23a26001d 100644 --- a/benchmark/Prim_BM.cpp +++ b/benchmark/Prim_BM.cpp @@ -16,8 +16,10 @@ static void Prim_X(benchmark::State &state) { auto &result = g.prim(); } } -BENCHMARK(Prim_X)->RangeMultiplier(16)->Range((unsigned long)1, - (unsigned long)1 << 16); +BENCHMARK(Prim_X) + ->RangeMultiplier(16) + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void Prim_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -26,4 +28,4 @@ static void Prim_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(Prim_FromReadedCitHep); +BENCHMARK(Prim_FromReadedCitHep)->Complexity(); diff --git a/benchmark/TopologicalSort_BM.cpp b/benchmark/TopologicalSort_BM.cpp index e706f1c8e..f1cce1f7c 100644 --- a/benchmark/TopologicalSort_BM.cpp +++ b/benchmark/TopologicalSort_BM.cpp @@ -18,7 +18,8 @@ static void TopologicalSort_X(benchmark::State &state) { } BENCHMARK(TopologicalSort_X) ->RangeMultiplier(16) - ->Range((unsigned long)1, (unsigned long)1 << 16); + ->Range((unsigned long)1, (unsigned long)1 << 16) + ->Complexity(); static void TopologicalSort_FromReadedCitHep(benchmark::State &state) { auto edgeSet = cit_graph_ptr->getEdgeSet(); @@ -27,4 +28,4 @@ static void TopologicalSort_FromReadedCitHep(benchmark::State &state) { } } -BENCHMARK(TopologicalSort_FromReadedCitHep); +BENCHMARK(TopologicalSort_FromReadedCitHep)->Complexity(); diff --git a/include/CXXGraph/Graph/Algorithm/BreadthFirstSearch_impl.hpp b/include/CXXGraph/Graph/Algorithm/BreadthFirstSearch_impl.hpp index 7813c27f4..f4f09c905 100644 --- a/include/CXXGraph/Graph/Algorithm/BreadthFirstSearch_impl.hpp +++ b/include/CXXGraph/Graph/Algorithm/BreadthFirstSearch_impl.hpp @@ -37,7 +37,7 @@ const std::vector> Graph::breadth_first_search( // check is exist node in the graph auto start_node_it = std::find_if( nodeSet.begin(), nodeSet.end(), - [&start](auto node) { return node->getUserId() == start.getUserId(); }); + [&start](auto &node) { return node->getUserId() == start.getUserId(); }); if (start_node_it == nodeSet.end()) { return visited; } diff --git a/include/CXXGraph/Graph/Algorithm/DepthFirstSearch_impl.hpp b/include/CXXGraph/Graph/Algorithm/DepthFirstSearch_impl.hpp index 69df8d94c..e11ae903c 100644 --- a/include/CXXGraph/Graph/Algorithm/DepthFirstSearch_impl.hpp +++ b/include/CXXGraph/Graph/Algorithm/DepthFirstSearch_impl.hpp @@ -33,11 +33,11 @@ const std::vector> Graph::depth_first_search( const Node &start) const { // vector to keep track of visited nodes std::vector> visited; - auto nodeSet = Graph::getNodeSet(); + auto &nodeSet = Graph::getNodeSet(); // check is exist node in the graph auto start_node_it = std::find_if( nodeSet.begin(), nodeSet.end(), - [&start](auto node) { return node->getUserId() == start.getUserId(); }); + [&start](auto &node) { return node->getUserId() == start.getUserId(); }); if (start_node_it == nodeSet.end()) { return visited; } diff --git a/include/CXXGraph/Graph/Graph_decl.h b/include/CXXGraph/Graph/Graph_decl.h index fb936bde7..35fe6690f 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 @@ -60,9 +61,15 @@ using shared = std::shared_ptr; template using T_EdgeSet = std::unordered_set>, edgeHash>; +template +using T_EdgeVector = std::vector>>; + template using T_NodeSet = std::unordered_set>, nodeHash>; +template +using T_NodeVector = std::vector>>; + template class Graph; @@ -125,6 +132,16 @@ class Graph { */ virtual const T_EdgeSet &getEdgeSet() const; + /** + * \brief + * Function that return the Edge set of the Graph + * Note: No Thread Safe + * + * @returns a list of Edges of the graph + * + */ + virtual T_EdgeVector getEdgeVector() const; + /** * \brief * Function set the Edge Set of the Graph @@ -278,6 +295,16 @@ class Graph { */ virtual const T_NodeSet getNodeSet() const; + /** + * \brief + * Function that return the Node Set of the Graph + * Note: No Thread Safe + * + * @returns a list of Nodes of the graph + * + */ + virtual const T_NodeVector getNodeVector() const; + /** * \brief * Function that return the Set of isolated nodes diff --git a/include/CXXGraph/Graph/Graph_impl.hpp b/include/CXXGraph/Graph/Graph_impl.hpp index 6bb73b8c7..950cd8daf 100644 --- a/include/CXXGraph/Graph/Graph_impl.hpp +++ b/include/CXXGraph/Graph/Graph_impl.hpp @@ -59,6 +59,12 @@ const T_EdgeSet &Graph::getEdgeSet() const { return edgeSet; } +template +T_EdgeVector Graph::getEdgeVector() const { + T_EdgeVector edgeVector(edgeSet.begin(), edgeSet.end()); + return edgeVector; +} + template void Graph::setEdgeSet(const T_EdgeSet &edgeSet) { this->edgeSet.clear(); @@ -311,6 +317,17 @@ const T_NodeSet Graph::getNodeSet() const { return nodeSet; } +template +const T_NodeVector Graph::getNodeVector() const { + auto &nodeSet = getNodeSet(); + T_NodeVector nodeVector(nodeSet.begin(), nodeSet.end()); + // Merge with the isolated nodes + nodeVector.insert(nodeVector.end(), this->isolatedNodesSet.begin(), + this->isolatedNodesSet.end()); + + return nodeVector; +} + template const T_NodeSet Graph::getIsolatedNodeSet() const { return isolatedNodesSet;