mirror of
https://github.com/boostorg/graph.git
synced 2025-05-09 23:14:00 +00:00
Adjacency matrix is by nature bidirectional and one can see that the concept was mostly implemented before. That implementation missed the degree function(s). These functions are implemented in this commit and the traversal_category is updated to meet the concept requirements. Tests are also added, though they are a bit shallow in the sense that they seem to omit intensive algorithms.
86 lines
3.6 KiB
C++
86 lines
3.6 KiB
C++
//=======================================================================
|
|
// 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/graph/adjacency_matrix.hpp>
|
|
#include <boost/graph/reverse_graph.hpp>
|
|
#include <boost/concept/assert.hpp>
|
|
#include <string>
|
|
|
|
int main(int, char*[])
|
|
{
|
|
using namespace boost;
|
|
// Check const reverse_graph
|
|
{
|
|
typedef adjacency_list< vecS, vecS, bidirectionalS,
|
|
property< vertex_color_t, int >, property< edge_weight_t, int >,
|
|
property< graph_name_t, std::string > >
|
|
AdjList;
|
|
typedef reverse_graph< AdjList > Graph;
|
|
BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
|
|
BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph >));
|
|
typedef graph_traits< Graph >::vertex_descriptor Vertex;
|
|
typedef graph_traits< Graph >::edge_descriptor Edge;
|
|
BOOST_CONCEPT_ASSERT(
|
|
(ReadablePropertyGraphConcept< Graph, Vertex, vertex_color_t >));
|
|
BOOST_CONCEPT_ASSERT(
|
|
(ReadablePropertyGraphConcept< Graph, Edge, edge_weight_t >));
|
|
BOOST_CONCEPT_ASSERT(
|
|
(ReadablePropertyGraphConcept< Graph, Edge, edge_underlying_t >));
|
|
AdjList g;
|
|
Graph gr(g);
|
|
get_property(gr, graph_name_t());
|
|
}
|
|
// Check non-const reverse_graph
|
|
{
|
|
typedef adjacency_list< vecS, vecS, bidirectionalS,
|
|
property< vertex_color_t, int >, property< edge_weight_t, int >,
|
|
property< graph_name_t, std::string > >
|
|
AdjList;
|
|
typedef reverse_graph< AdjList, AdjList& > Graph;
|
|
BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
|
|
BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph >));
|
|
typedef graph_traits< Graph >::vertex_descriptor Vertex;
|
|
typedef graph_traits< Graph >::edge_descriptor Edge;
|
|
BOOST_CONCEPT_ASSERT(
|
|
(PropertyGraphConcept< Graph, Vertex, vertex_color_t >));
|
|
BOOST_CONCEPT_ASSERT(
|
|
(PropertyGraphConcept< Graph, Edge, edge_weight_t >));
|
|
BOOST_CONCEPT_ASSERT(
|
|
(ReadablePropertyGraphConcept< Graph, Edge, edge_underlying_t >));
|
|
AdjList g;
|
|
Graph gr(g);
|
|
get_property(gr, graph_name_t());
|
|
set_property(gr, graph_name_t(), "foo");
|
|
}
|
|
// Check matrix
|
|
{
|
|
typedef adjacency_matrix< directedS,
|
|
property< vertex_color_t, int >, property< edge_weight_t, int >,
|
|
property< graph_name_t, std::string > >
|
|
AdjMatrix;
|
|
typedef reverse_graph< AdjMatrix > Graph;
|
|
BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
|
|
BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph >));
|
|
typedef graph_traits< Graph >::vertex_descriptor Vertex;
|
|
typedef graph_traits< Graph >::edge_descriptor Edge;
|
|
BOOST_CONCEPT_ASSERT(
|
|
(ReadablePropertyGraphConcept< Graph, Vertex, vertex_color_t >));
|
|
BOOST_CONCEPT_ASSERT(
|
|
(ReadablePropertyGraphConcept< Graph, Edge, edge_weight_t >));
|
|
BOOST_CONCEPT_ASSERT(
|
|
(ReadablePropertyGraphConcept< Graph, Edge, edge_underlying_t >));
|
|
AdjMatrix g(42);
|
|
Graph gr(g);
|
|
get_property(gr, graph_name_t());
|
|
}
|
|
return 0;
|
|
}
|