123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- //=======================================================================
- // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
- // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
- //
- // 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 <boost/graph/graph_concepts.hpp>
- #include <boost/graph/graph_archetypes.hpp>
- #include <boost/graph/adjacency_list.hpp>
- #include <boost/concept/assert.hpp>
- int main(int,char*[])
- {
- using namespace boost;
- // Check adjacency_list with properties
- {
- typedef adjacency_list<vecS, vecS, directedS,
- property<vertex_color_t, int>,
- property<edge_weight_t, int>
- > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- typedef graph_traits<Graph>::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableIncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- ReadablePropertyGraphConcept<Graph, Vertex, vertex_index_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Vertex, vertex_color_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Edge, edge_weight_t> ));
- }
- {
- typedef adjacency_list<vecS, vecS, bidirectionalS,
- property<vertex_color_t, int>,
- property<edge_weight_t, int>
- > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- typedef graph_traits<Graph>::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- ReadablePropertyGraphConcept<Graph, Vertex, vertex_index_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Vertex, vertex_color_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Edge, edge_weight_t> ));
- }
- {
- typedef adjacency_list< listS, listS, directedS,
- property<vertex_color_t, int>,
- property<edge_weight_t, int>
- > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- typedef graph_traits<Graph>::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableIncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Vertex, vertex_color_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Edge, edge_weight_t> ));
- }
- {
- typedef adjacency_list< listS, listS, undirectedS,
- property<vertex_color_t, int>,
- property<edge_weight_t, int>
- > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- typedef graph_traits<Graph>::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Vertex, vertex_color_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Edge, edge_weight_t> ));
- }
- // Checking adjacency_list with EdgeList=setS
- {
- typedef adjacency_list<setS, vecS, bidirectionalS,
- property<vertex_color_t, int>,
- property<edge_weight_t, int>
- > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- typedef graph_traits<Graph>::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- ReadablePropertyGraphConcept<Graph, Vertex, vertex_index_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Vertex, vertex_color_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Edge, edge_weight_t> ));
- }
- {
- typedef adjacency_list< setS, listS, directedS,
- property<vertex_color_t, int>,
- property<edge_weight_t, int>
- > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- typedef graph_traits<Graph>::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableIncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Vertex, vertex_color_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Edge, edge_weight_t> ));
- }
- {
- typedef adjacency_list< setS, listS, undirectedS,
- property<vertex_color_t, int>,
- property<edge_weight_t, int>
- > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- typedef graph_traits<Graph>::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Vertex, vertex_color_t> ));
- BOOST_CONCEPT_ASSERT((
- LvaluePropertyGraphConcept<Graph, Edge, edge_weight_t> ));
- }
- // Check adjacency_list without any properties
- {
- typedef adjacency_list<vecS, vecS, directedS > Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableIncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( VertexMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeMutablePropertyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- ReadablePropertyGraphConcept<Graph, Vertex, vertex_index_t> ));
- }
- {
- typedef adjacency_list<vecS, vecS, bidirectionalS> Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT((
- ReadablePropertyGraphConcept<Graph, Vertex, vertex_index_t> ));
- }
- {
- typedef adjacency_list< listS, listS, directedS> Graph;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableIncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- }
- {
- typedef adjacency_list< listS, listS, undirectedS> Graph;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- }
- // Checking EdgeList=setS with no properties
- {
- typedef adjacency_list<setS, vecS, bidirectionalS> Graph;
- typedef graph_traits<Graph>::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( ReadablePropertyGraphConcept<Graph,
- Vertex, vertex_index_t> ));
- }
- {
- typedef adjacency_list< setS, listS, directedS> Graph;
- BOOST_CONCEPT_ASSERT(( MutableIncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- }
- {
- typedef adjacency_list< setS, listS, undirectedS> Graph;
- BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableBidirectionalGraphConcept<Graph> ));
- BOOST_CONCEPT_ASSERT(( MutableEdgeListGraphConcept<Graph> ));
- }
- return 0;
- }
|