// Copyright 2008-2010 Gordon Woodhull // 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 #include #include #include namespace mpl_graph = boost::msm::mpl_graph; namespace mpl = boost::mpl; // vertices struct A{}; struct B{}; struct C{}; struct D{}; struct E{}; struct F{}; struct G{}; // edges struct A_B{}; struct B_C{}; struct C_D{}; struct C_E{}; struct C_F{}; struct B_F{}; /* incidence list test graph: A -> B -> C -\--> D \ |--> E \ \--> F \-----/ G */ typedef mpl::vector, mpl::vector, mpl::vector, mpl::vector, mpl::vector, mpl::vector > some_incidence_list; typedef mpl_graph::incidence_list_graph some_incidence_list_graph; /* adjacency list test graph: A -> B -> C -\--> D \ |--> E \ \--> F \-----/ G */ typedef mpl::vector< mpl::pair > >, mpl::pair, mpl::pair > >, mpl::pair, mpl::pair, mpl::pair > >, mpl::pair > > some_adjacency_list; typedef mpl_graph::adjacency_list_graph some_adjacency_list_graph; struct preordering_visitor : mpl_graph::dfs_default_visitor_operations { template struct discover_vertex : mpl::push_back {}; }; struct postordering_visitor : mpl_graph::dfs_default_visitor_operations { template struct finish_vertex : mpl::push_back {}; }; // adjacency list tests // preordering, default start node (first) typedef mpl::first >::type>::type preorder_adj; BOOST_MPL_ASSERT(( mpl::equal > )); // postordering, default start node typedef mpl::first >::type>::type postorder_adj; BOOST_MPL_ASSERT(( mpl::equal > )); // preordering all starting at C typedef mpl::first, C>::type>::type preorder_adj_all_from_c; BOOST_MPL_ASSERT(( mpl::equal > )); // preordering just those starting at C typedef mpl::first, C>::type>::type preorder_adj_from_c; BOOST_MPL_ASSERT(( mpl::equal > )); // incidence list tests // preordering, default start node (first) typedef mpl::first >::type>::type preorder_inc; BOOST_MPL_ASSERT(( mpl::equal > )); // postordering, default start node typedef mpl::first >::type>::type postorder_inc; BOOST_MPL_ASSERT(( mpl::equal > )); // preordering starting at C typedef mpl::first, C>::type>::type preorder_inc_all_from_c; BOOST_MPL_ASSERT(( mpl::equal > )); // preordering starting at B typedef mpl::first, B>::type>::type preorder_inc_from_b; BOOST_MPL_ASSERT(( mpl::equal > )); int main() { return 0; }