diff --git a/test/subgraph.cpp b/test/subgraph.cpp index b9998daf..428596d7 100644 --- a/test/subgraph.cpp +++ b/test/subgraph.cpp @@ -24,6 +24,8 @@ //======================================================================= +#include + #define BOOST_INCLUDE_MAIN #include @@ -31,6 +33,7 @@ #include #include #include +#include // UNDER CONSTRUCTION @@ -44,7 +47,7 @@ int test_main(int argc, char* argv[]) typedef graph_traits::edge_descriptor edge_t; mt19937 gen; - for (int t = 0; t < 25; t += 5) { + for (int t = 0; t < 100; t += 5) { subgraph_t g; int N = t + 2; std::vector vertex_set; @@ -62,40 +65,42 @@ int test_main(int argc, char* argv[]) gt.test_edge_list_graph(vertex_set, edge_set, g); gt.test_adjacency_matrix(vertex_set, edge_set, g); - gt.test_add_vertex(g); - gt.test_add_edge(random_vertex(g, gen), random_vertex(g, gen), g); - gt.test_remove_edge(random_vertex(g, gen), random_vertex(g, gen), g); - gt.test_remove_edge(random_edge(g, gen), g); - gt.test_clear_vertex(random_vertex(g, gen), g); - std::vector sub_vertex_set; std::vector sub_global_map; + std::vector global_sub_map(num_vertices(g)); std::vector< std::pair > sub_edge_set; subgraph_t& g_s = g.create_subgraph(); - for (int i = 0; i < N/2; ++i) { - vertex_t v_global = random_vertex(g, gen); + const int Nsub = N/2; + + // Collect a set of random vertices to put in the subgraph + std::set verts; + while (verts.size() < Nsub) + verts.insert(random_vertex(g, gen)); + + for (std::set::iterator i = verts.begin(); + i != verts.end(); ++i) { + vertex_t v_global = *i; vertex_t v = add_vertex(v_global, g_s); sub_vertex_set.push_back(v); sub_global_map.push_back(v_global); + global_sub_map[v_global] = v; } + // compute induced edges - for (int j = 0; j < N; ++j) - for (int k = 0; k < N; ++k) { - edge_t e; bool exists; - tie(e, exists) = edge(sub_global_map[j], sub_global_map[k], g); - if (exists) - sub_edge_set.push_back(std::make_pair(source(e, g), target(e, g))); - } - + BGL_FORALL_EDGES(e, g, subgraph_t) + if (contains(sub_global_map, source(e, g)) + && contains(sub_global_map, target(e, g))) + sub_edge_set.push_back(std::make_pair(global_sub_map[source(e, g)], + global_sub_map[target(e, g)])); + gt.test_incidence_graph(sub_vertex_set, sub_edge_set, g_s); gt.test_bidirectional_graph(sub_vertex_set, sub_edge_set, g_s); gt.test_adjacency_graph(sub_vertex_set, sub_edge_set, g_s); gt.test_vertex_list_graph(sub_vertex_set, g_s); gt.test_edge_list_graph(sub_vertex_set, sub_edge_set, g_s); gt.test_adjacency_matrix(sub_vertex_set, sub_edge_set, g_s); - } return 0; }