From 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 20:24:20 +0200 Subject: Adding upstream version 14.2.21. Signed-off-by: Daniel Baumann --- src/boost/libs/graph/test/eccentricity.cpp | 142 +++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/boost/libs/graph/test/eccentricity.cpp (limited to 'src/boost/libs/graph/test/eccentricity.cpp') diff --git a/src/boost/libs/graph/test/eccentricity.cpp b/src/boost/libs/graph/test/eccentricity.cpp new file mode 100644 index 00000000..2c04c7d6 --- /dev/null +++ b/src/boost/libs/graph/test/eccentricity.cpp @@ -0,0 +1,142 @@ +// (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 + +#include +#include +#include +#include +#include +#include + + +using namespace std; +using namespace boost; + +// number of vertices in the graph +static const unsigned N = 5; + +template +struct vertex_vector +{ + typedef graph_traits traits; + typedef vector type; +}; + +template +void build_graph(Graph& g, + typename vertex_vector::type& v) +{ + // add vertices + for(size_t i = 0; i < N; ++i) { + v[i] = add_vertex(g); + } + + // add edges + add_edge(v[0], v[1], g); + add_edge(v[1], v[2], g); + add_edge(v[2], v[0], g); + add_edge(v[3], v[4], g); + add_edge(v[4], v[0], g); +} + + +template +void test_undirected() +{ + typedef typename graph_traits::vertex_descriptor Vertex; + typedef typename graph_traits::edge_descriptor Edge; + + typedef exterior_vertex_property EccentricityProperty; + typedef typename EccentricityProperty::container_type EccentricityContainer; + typedef typename EccentricityProperty::map_type EccentricityMap; + + typedef exterior_vertex_property DistanceProperty; + typedef typename DistanceProperty::matrix_type DistanceMatrix; + typedef typename DistanceProperty::matrix_map_type DistanceMatrixMap; + + typedef constant_property_map WeightMap; + + Graph g; + vector v(N); + build_graph(g, v); + + EccentricityContainer eccs(num_vertices(g)); + DistanceMatrix distances(num_vertices(g)); + + EccentricityMap em(eccs, g); + DistanceMatrixMap dm(distances, g); + + WeightMap wm(1); + + floyd_warshall_all_pairs_shortest_paths(g, dm, weight_map(wm)); + all_eccentricities(g, dm, em); + int rad = radius(g, em); + int dia = diameter(g, em); + + BOOST_ASSERT(em[v[0]] == 2); + BOOST_ASSERT(em[v[1]] == 3); + BOOST_ASSERT(em[v[2]] == 3); + BOOST_ASSERT(em[v[3]] == 3); + BOOST_ASSERT(em[v[4]] == 2); + BOOST_ASSERT(rad == 2); + BOOST_ASSERT(dia == 3); +} + +template +void test_directed() +{ + typedef typename graph_traits::vertex_descriptor Vertex; + typedef typename graph_traits::edge_descriptor Edge; + + typedef exterior_vertex_property EccentricityProperty; + typedef typename EccentricityProperty::container_type EccentricityContainer; + typedef typename EccentricityProperty::map_type EccentricityMap; + + typedef exterior_vertex_property DistanceProperty; + typedef typename DistanceProperty::matrix_type DistanceMatrix; + typedef typename DistanceProperty::matrix_map_type DistanceMatrixMap; + + typedef constant_property_map WeightMap; + + Graph g; + vector v(N); + build_graph(g, v); + + EccentricityContainer eccs(num_vertices(g)); + DistanceMatrix distances(num_vertices(g)); + + EccentricityMap em(eccs, g); + DistanceMatrixMap dm(distances, g); + + WeightMap wm(1); + + floyd_warshall_all_pairs_shortest_paths(g, dm, weight_map(wm)); + all_eccentricities(g, dm, em); + int rad = radius(g, em); + int dia = diameter(g, em); + + int inf = numeric_values::infinity(); + BOOST_ASSERT(em[v[0]] == inf); + BOOST_ASSERT(em[v[1]] == inf); + BOOST_ASSERT(em[v[2]] == inf); + BOOST_ASSERT(em[v[3]] == 4); + BOOST_ASSERT(em[v[4]] == inf); + BOOST_ASSERT(rad == 4); + BOOST_ASSERT(dia == inf); +} + + +int +main(int, char *[]) +{ + typedef undirected_graph<> Graph; + typedef directed_graph<> Digraph; + + test_undirected(); + test_directed(); +} -- cgit v1.2.3