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/mean_geodesic.cpp | 140 ++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/boost/libs/graph/test/mean_geodesic.cpp (limited to 'src/boost/libs/graph/test/mean_geodesic.cpp') diff --git a/src/boost/libs/graph/test/mean_geodesic.cpp b/src/boost/libs/graph/test/mean_geodesic.cpp new file mode 100644 index 00000000..d78f677d --- /dev/null +++ b/src/boost/libs/graph/test/mean_geodesic.cpp @@ -0,0 +1,140 @@ +// (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; + +// useful types +// 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 CentralityProperty; + typedef typename CentralityProperty::container_type CentralityContainer; + typedef typename CentralityProperty::map_type CentralityMap; + + 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); + + CentralityContainer centralities(num_vertices(g)); + DistanceMatrix distances(num_vertices(g)); + + CentralityMap cm(centralities, g); + DistanceMatrixMap dm(distances, g); + + WeightMap wm(1); + + floyd_warshall_all_pairs_shortest_paths(g, dm, weight_map(wm)); + double geo1 = all_mean_geodesics(g, dm, cm); + double geo2 = small_world_distance(g, cm); + + BOOST_ASSERT(cm[v[0]] == double(5)/4); + BOOST_ASSERT(cm[v[1]] == double(7)/4); + BOOST_ASSERT(cm[v[2]] == double(7)/4); + BOOST_ASSERT(cm[v[3]] == double(9)/4); + BOOST_ASSERT(cm[v[4]] == double(6)/4); + BOOST_ASSERT(geo1 == double(34)/20); + BOOST_ASSERT(geo1 == geo2); +} + +template +void test_directed() +{ + typedef typename graph_traits::vertex_descriptor Vertex; + typedef typename graph_traits::edge_descriptor Edge; + + typedef exterior_vertex_property CentralityProperty; + typedef typename CentralityProperty::container_type CentralityContainer; + typedef typename CentralityProperty::map_type CentralityMap; + + 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); + + CentralityContainer centralities(num_vertices(g)); + DistanceMatrix distances(num_vertices(g)); + + CentralityMap cm(centralities, g); + DistanceMatrixMap dm(distances, g); + + WeightMap wm(1); + + floyd_warshall_all_pairs_shortest_paths(g, dm, weight_map(wm)); + double geo1 = all_mean_geodesics(g, dm, cm); + double geo2 = small_world_distance(g, cm); + + double inf = numeric_values::infinity(); + BOOST_ASSERT(cm[v[0]] == inf); + BOOST_ASSERT(cm[v[1]] == inf); + BOOST_ASSERT(cm[v[2]] == inf); + BOOST_ASSERT(cm[v[3]] == double(10)/4); + BOOST_ASSERT(cm[v[4]] == inf); + BOOST_ASSERT(geo1 == inf); + BOOST_ASSERT(geo1 == geo2); +} + + +int +main(int, char *[]) +{ + typedef undirected_graph<> Graph; + typedef directed_graph<> Digraph; + + test_undirected(); + test_directed(); +} -- cgit v1.2.3