summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/graph/test/index_graph.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/graph/test/index_graph.cpp')
-rw-r--r--src/boost/libs/graph/test/index_graph.cpp93
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;
+}