• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
test_graph_nonloop()16 template < typename Graph > void test_graph_nonloop()
17 {
18     typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
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);
29 }
30 
test_multigraph_nonloop()31 template < typename Graph > void test_multigraph_nonloop()
32 {
33     typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
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);
45 }
46 
test_graph_loop()47 template < typename Graph > void test_graph_loop()
48 {
49     typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
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 
test_multigraph_loop()60 template < typename Graph > void test_multigraph_loop()
61 {
62     typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
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 
test()74 template < typename Kind > void test()
75 {
76     typedef no_property na;
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 >();
96 }
97 
main()98 int main()
99 {
100     test< undirectedS >();
101     test< directedS >();
102     test< bidirectionalS >();
103 
104     return 0;
105 }
106