// (C) Copyright 2007-2009 Andrew Sutton // // Use, modification and distribution are subject to the // Boost Software License, Version 1.0 (See accompanying file // LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) #include #include #include using namespace std; using namespace boost; template void test() { typedef typename graph_traits::vertex_descriptor Vertex; typedef typename property_map::type IndexMap; static const size_t N = 5; Graph g; (void)(IndexMap)get(vertex_index, g); // build up the graph Vertex v[N]; for(size_t i = 0; i < N; ++i) { v[i] = add_vertex(g); } // after the first build, we should have these conditions BOOST_ASSERT(max_vertex_index(g) == N); for(size_t i = 0; i < N; ++i) { BOOST_ASSERT(get_vertex_index(v[i], g) == i); } // Remove all vertices and then re-add them. for(size_t i = 0; i < N; ++i) remove_vertex(v[i], g); BOOST_ASSERT(num_vertices(g) == 0); for(size_t i = 0; i < N; ++i) { v[i] = add_vertex(g); } BOOST_ASSERT(num_vertices(g) == N); // Before renumbering, our vertices should be off by N. In other words, // we're not in a good state. BOOST_ASSERT(max_vertex_index(g) == 10); for(size_t i = 0; i < N; ++i) { BOOST_ASSERT(get_vertex_index(v[i], g) == N + i); } // Renumber vertices renumber_vertex_indices(g); // And we should be back to the initial condition BOOST_ASSERT(max_vertex_index(g) == N); for(size_t i = 0; i < N; ++i) { BOOST_ASSERT(get_vertex_index(v[i], g) == i); } } // Make sure that graphs constructed over n vertices will actually number // their vertices correctly. template void build() { typedef typename graph_traits::vertex_iterator Iterator; typedef typename property_map::type IndexMap; static const size_t N = 5; Graph g(N); BOOST_ASSERT(max_vertex_index(g) == N); (void)(IndexMap)get(vertex_index, g); // Each vertex should be numbered correctly. Iterator i, end; boost::tie(i, end) = vertices(g); for(size_t x = 0; i != end; ++i, ++x) { BOOST_ASSERT(get_vertex_index(*i, g) == x); } } int main(int, char*[]) { test< undirected_graph<> >(); test< directed_graph<> >(); build< undirected_graph<> >(); return 0; }