summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/graph/test/subgraph_props.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/graph/test/subgraph_props.cpp')
-rw-r--r--src/boost/libs/graph/test/subgraph_props.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/boost/libs/graph/test/subgraph_props.cpp b/src/boost/libs/graph/test/subgraph_props.cpp
new file mode 100644
index 00000000..bdee6534
--- /dev/null
+++ b/src/boost/libs/graph/test/subgraph_props.cpp
@@ -0,0 +1,132 @@
+// (C) Copyright Andrew Sutton 2009
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/subgraph.hpp>
+#include "typestr.hpp"
+
+using namespace boost;
+
+struct TestProps {
+ typedef property<vertex_name_t, std::size_t> VertexProp;
+ typedef property<edge_name_t, std::size_t> EdgeName;
+ typedef property<edge_index_t, std::size_t, EdgeName> EdgeProp;
+
+ typedef adjacency_list<
+ vecS, vecS, bidirectionalS, VertexProp, EdgeProp
+ > Graph;
+
+ typedef subgraph<Graph> Subgraph;
+ typedef graph_traits<Subgraph>::vertex_descriptor Vertex;
+ typedef graph_traits<Subgraph>::edge_descriptor Edge;
+ typedef graph_traits<Subgraph>::vertex_iterator VertexIter;
+ typedef std::pair<VertexIter, VertexIter> VertexRange;
+
+ static void run() {
+ // Create a graph with some vertices.
+ Subgraph g(5);
+ VertexRange r = vertices(g);
+
+ // Create a child subgraph and add some vertices.
+ Subgraph& sg = g.create_subgraph();
+ Vertex v = add_vertex(*r.first, sg);
+
+ typedef property_map<Subgraph, vertex_name_t>::type DefaultMap;
+ DefaultMap map = get(vertex_name, g);
+ BOOST_ASSERT(get(map, v) == 0);
+ put(map, v, 5);
+ BOOST_ASSERT(get(map, v) == 5);
+
+ typedef global_property<vertex_name_t> GlobalProp;
+ typedef property_map<Subgraph, GlobalProp>::type GlobalVertMap;
+ GlobalVertMap groot = get(global(vertex_name), g);
+ GlobalVertMap gsub = get(global(vertex_name), sg);
+ BOOST_ASSERT(get(groot, v) == 5);
+ BOOST_ASSERT(get(gsub, v) == 5);
+ put(gsub, v, 10);
+ BOOST_ASSERT(get(groot, v) == 10);
+ BOOST_ASSERT(get(gsub, v) == 10);
+ BOOST_ASSERT(get(map, v) == 10);
+
+ typedef local_property<vertex_name_t> LocalProp;
+ typedef property_map<Subgraph, LocalProp>::type LocalVertMap;
+ LocalVertMap lroot = get(local(vertex_name), g); // Actually global!
+ LocalVertMap lsub = get(local(vertex_name), sg);
+ BOOST_ASSERT(get(lroot, v) == 10); // Recall it's 10 from above!
+ BOOST_ASSERT(get(lsub, v) == 0);
+ put(lsub, v, 5);
+ BOOST_ASSERT(get(lsub, v) == 5);
+ BOOST_ASSERT(get(lroot, v) == 10); // Don't change the root prop
+ BOOST_ASSERT(get(map, v) == 10); // Don't change the root prop
+
+// typedef detail::subgraph_local_pmap::bind_<LocalProp, Subgraph, void> PM;
+// std::cout << typestr<PM::TagType>() << "\n";
+// std::cout << typestr<PM::PMap>() << "\n";
+ }
+};
+
+struct TestBundles {
+ struct Node {
+ Node() : value(-1) { }
+ int value;
+ };
+ struct Arc {
+ Arc() : value(-1) { }
+ int value;
+ };
+ typedef property<edge_index_t, std::size_t, Arc> EdgeProp;
+
+ typedef adjacency_list<
+ vecS, vecS, bidirectionalS, Node, EdgeProp
+ > Graph;
+
+ typedef subgraph<Graph> Subgraph;
+ typedef graph_traits<Subgraph>::vertex_descriptor Vertex;
+ typedef graph_traits<Subgraph>::edge_descriptor Edge;
+ typedef graph_traits<Subgraph>::vertex_iterator VertexIter;
+ typedef std::pair<VertexIter, VertexIter> VertexRange;
+
+ static void run() {
+ // Create a graph with some vertices.
+ Subgraph g(5);
+ VertexRange r = vertices(g);
+
+ // Create a child subgraph and add some vertices.
+ Subgraph& sg = g.create_subgraph();
+ Vertex v = add_vertex(*r.first, sg);
+
+ sg[v].value = 1;
+ BOOST_ASSERT(sg[v].value == 1);
+ BOOST_ASSERT(sg[global(v)].value == 1);
+ BOOST_ASSERT(sg[local(v)].value == -1);
+
+ sg[local(v)].value = 5;
+ BOOST_ASSERT(sg[local(v)].value == 5);
+ BOOST_ASSERT(sg[global(v)].value == 1);
+ BOOST_ASSERT(sg[v].value == 1);
+
+ typedef property_map<
+ Subgraph, local_property<int Node::*>
+ >::type LocalVertMap;
+ LocalVertMap lvm = get(local(&Node::value), sg);
+ BOOST_ASSERT(get(lvm, v) == 5);
+
+ typedef property_map<
+ Subgraph, global_property<int Node::*>
+ >::type GlobalVertMap;
+ GlobalVertMap gvm = get(global(&Node::value), sg);
+ BOOST_ASSERT(get(gvm, v) == 1);
+ }
+};
+
+int main(int argc, char* argv[])
+{
+ TestProps::run();
+ TestBundles::run();
+
+ return 0;
+}