]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/graph/test/adj_list_loops.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / graph / test / adj_list_loops.cpp
CommitLineData
7c673cae
FG
1// (C) Copyright Andrew Sutton 2009
2//
3// Use, modification and distribution are subject to the
4// Boost Software License, Version 1.0 (See accompanying file
5// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
6
7#include <iostream>
8
9#include <boost/assert.hpp>
10#include <boost/graph/adjacency_list.hpp>
11
12using namespace boost;
13
14// TODO: Integrate this into a larger adj_list test suite.
15
f67539c2 16template < typename Graph > void test_graph_nonloop()
7c673cae 17{
f67539c2 18 typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
7c673cae
FG
19
20 // Build a graph with 1 edge and turn it into a loop.
21 Graph g(5);
22 Vertex u = *vertices(g).first;
23 Vertex v = *next(vertices(g).first, 2);
24 add_edge(u, v, g);
25 BOOST_ASSERT(num_vertices(g) == 5);
26 BOOST_ASSERT(num_edges(g) == 1);
27 remove_edge(u, v, g);
28 BOOST_ASSERT(num_edges(g) == 0);
7c673cae
FG
29}
30
f67539c2 31template < typename Graph > void test_multigraph_nonloop()
7c673cae 32{
f67539c2 33 typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
7c673cae
FG
34
35 // Build a graph with 1 edge and turn it into a loop.
36 Graph g(5);
37 Vertex u = *vertices(g).first;
38 Vertex v = *next(vertices(g).first, 2);
39 add_edge(u, v, g);
40 add_edge(u, v, g);
41 BOOST_ASSERT(num_vertices(g) == 5);
42 BOOST_ASSERT(num_edges(g) == 2);
43 remove_edge(u, v, g);
44 BOOST_ASSERT(num_edges(g) == 0);
7c673cae
FG
45}
46
f67539c2 47template < typename Graph > void test_graph_loop()
7c673cae 48{
f67539c2 49 typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
7c673cae
FG
50
51 Graph g(5);
52 Vertex v = *next(vertices(g).first, 2);
53 add_edge(v, v, g);
54 BOOST_ASSERT(num_vertices(g) == 5);
55 BOOST_ASSERT(num_edges(g) == 1);
56 remove_edge(v, v, g);
57 BOOST_ASSERT(num_edges(g) == 0);
58}
59
f67539c2 60template < typename Graph > void test_multigraph_loop()
7c673cae 61{
f67539c2 62 typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
7c673cae
FG
63
64 Graph g(5);
65 Vertex v = *next(vertices(g).first, 2);
66 add_edge(v, v, g);
67 add_edge(v, v, g);
68 BOOST_ASSERT(num_vertices(g) == 5);
69 BOOST_ASSERT(num_edges(g) == 2);
70 remove_edge(v, v, g);
71 BOOST_ASSERT(num_edges(g) == 0);
72}
73
f67539c2 74template < typename Kind > void test()
7c673cae
FG
75{
76 typedef no_property na;
f67539c2
TL
77 typedef adjacency_list< vecS, vecS, Kind, na, na, na, listS > VVL;
78 typedef adjacency_list< listS, vecS, Kind, na, na, na, listS > LVL;
79 typedef adjacency_list< setS, vecS, Kind, na, na, na, listS > SVL;
80 typedef adjacency_list< multisetS, vecS, Kind, na, na, na, listS > MVL;
81
82 test_graph_nonloop< VVL >();
83 test_graph_nonloop< LVL >();
84 test_graph_nonloop< SVL >();
85 test_graph_nonloop< MVL >();
86 test_multigraph_nonloop< VVL >();
87 test_multigraph_nonloop< LVL >();
88 test_multigraph_nonloop< MVL >();
89 test_graph_loop< VVL >();
90 test_graph_loop< LVL >();
91 test_graph_loop< SVL >();
92 test_graph_loop< MVL >();
93 test_multigraph_loop< VVL >();
94 test_multigraph_loop< LVL >();
95 test_multigraph_loop< MVL >();
7c673cae
FG
96}
97
7c673cae
FG
98int main()
99{
f67539c2
TL
100 test< undirectedS >();
101 test< directedS >();
102 test< bidirectionalS >();
7c673cae
FG
103
104 return 0;
105}