diff options
Diffstat (limited to 'src/boost/libs/graph/test/index_graph.cpp')
-rw-r--r-- | src/boost/libs/graph/test/index_graph.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/boost/libs/graph/test/index_graph.cpp b/src/boost/libs/graph/test/index_graph.cpp new file mode 100644 index 00000000..aaa7958b --- /dev/null +++ b/src/boost/libs/graph/test/index_graph.cpp @@ -0,0 +1,93 @@ +// (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 <iostream> +#include <boost/graph/undirected_graph.hpp> +#include <boost/graph/directed_graph.hpp> + +using namespace std; +using namespace boost; + +template <typename Graph> +void test() +{ + typedef typename graph_traits<Graph>::vertex_descriptor Vertex; + typedef typename property_map<Graph, vertex_index_t>::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 <typename Graph> +void build() +{ + typedef typename graph_traits<Graph>::vertex_iterator Iterator; + typedef typename property_map<Graph, vertex_index_t>::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; +} |