diff options
Diffstat (limited to 'src/boost/libs/graph/test/degree_centrality.cpp')
-rw-r--r-- | src/boost/libs/graph/test/degree_centrality.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/boost/libs/graph/test/degree_centrality.cpp b/src/boost/libs/graph/test/degree_centrality.cpp new file mode 100644 index 00000000..42adb5b1 --- /dev/null +++ b/src/boost/libs/graph/test/degree_centrality.cpp @@ -0,0 +1,121 @@ +// (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 <vector> + +#include <boost/graph/undirected_graph.hpp> +#include <boost/graph/directed_graph.hpp> +#include <boost/graph/degree_centrality.hpp> +#include <boost/graph/exterior_property.hpp> + +using namespace std; +using namespace boost; + +// useful types +// number of vertices in the graph +static const unsigned N = 5; + +template <typename Graph> +void build_graph(Graph& g, + vector<typename graph_traits<Graph>::vertex_descriptor>& 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 <typename Graph> +void test_undirected() +{ + typedef typename graph_traits<Graph>::vertex_descriptor Vertex; + + typedef exterior_vertex_property<Graph, unsigned> CentralityProperty; + typedef typename CentralityProperty::container_type CentralityContainer; + typedef typename CentralityProperty::map_type CentralityMap; + + Graph g; + vector<Vertex> v(N); + build_graph(g, v); + + CentralityContainer cents(num_vertices(g)); + CentralityMap cm(cents, g); + all_degree_centralities(g, cm); + + BOOST_ASSERT(cm[v[0]] == 3); + BOOST_ASSERT(cm[v[1]] == 2); + BOOST_ASSERT(cm[v[2]] == 2); + BOOST_ASSERT(cm[v[3]] == 1); + BOOST_ASSERT(cm[v[4]] == 2); +} + +template <typename Graph> +void test_influence() +{ + typedef typename graph_traits<Graph>::vertex_descriptor Vertex; + + typedef exterior_vertex_property<Graph, unsigned> CentralityProperty; + typedef typename CentralityProperty::container_type CentralityContainer; + typedef typename CentralityProperty::map_type CentralityMap; + + Graph g; + + vector<Vertex> v(N); + build_graph(g, v); + + CentralityContainer cents(num_vertices(g)); + CentralityMap cm(cents, g); + all_influence_values(g, cm); + + BOOST_ASSERT(cm[v[0]] == 1); + BOOST_ASSERT(cm[v[1]] == 1); + BOOST_ASSERT(cm[v[2]] == 1); + BOOST_ASSERT(cm[v[3]] == 1); + BOOST_ASSERT(cm[v[4]] == 1); +} + +template <typename Graph> +void test_prestige() +{ + typedef typename graph_traits<Graph>::vertex_descriptor Vertex; + + typedef exterior_vertex_property<Graph, unsigned> CentralityProperty; + typedef typename CentralityProperty::container_type CentralityContainer; + typedef typename CentralityProperty::map_type CentralityMap; + + Graph g; + + vector<Vertex> v(N); + build_graph(g, v); + + CentralityContainer cents(num_vertices(g)); + CentralityMap cm(cents, g); + all_prestige_values(g, cm); + + BOOST_ASSERT(cm[v[0]] == 2); + BOOST_ASSERT(cm[v[1]] == 1); + BOOST_ASSERT(cm[v[2]] == 1); + BOOST_ASSERT(cm[v[3]] == 0); + BOOST_ASSERT(cm[v[4]] == 1); +} + +int +main(int, char *[]) +{ + typedef undirected_graph<> Graph; + typedef directed_graph<> Digraph; + + test_undirected<Graph>(); + test_influence<Digraph>(); + test_prestige<Digraph>(); +} |