]>
Commit | Line | Data |
---|---|---|
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 | ||
12 | using namespace boost; | |
13 | ||
14 | // TODO: Integrate this into a larger adj_list test suite. | |
15 | ||
f67539c2 | 16 | template < 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 | 31 | template < 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 | 47 | template < 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 | 60 | template < 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 | 74 | template < 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 |
98 | int main() |
99 | { | |
f67539c2 TL |
100 | test< undirectedS >(); |
101 | test< directedS >(); | |
102 | test< bidirectionalS >(); | |
7c673cae FG |
103 | |
104 | return 0; | |
105 | } |