4 #include <lemon/concept/undir_graph.h> |
4 #include <lemon/concept/undir_graph.h> |
5 #include <lemon/list_graph.h> |
5 #include <lemon/list_graph.h> |
6 #include <lemon/smart_graph.h> |
6 #include <lemon/smart_graph.h> |
7 #include <lemon/full_graph.h> |
7 #include <lemon/full_graph.h> |
8 |
8 |
|
9 #include <lemon/graph_utils.h> |
|
10 |
9 #include "test_tools.h" |
11 #include "test_tools.h" |
10 |
12 |
11 |
13 |
12 using namespace lemon; |
14 using namespace lemon; |
13 using namespace lemon::concept; |
15 using namespace lemon::concept; |
14 |
16 |
15 |
17 void check_concepts() { |
16 int main() { |
|
17 typedef UndirGraphExtender<ListGraphBase> UndirListGraphBase; |
18 typedef UndirGraphExtender<ListGraphBase> UndirListGraphBase; |
18 |
19 |
19 typedef IterableUndirGraphExtender< |
20 typedef IterableUndirGraphExtender< |
20 AlterableUndirGraphExtender<UndirListGraphBase> > IterableUndirListGraph; |
21 AlterableUndirGraphExtender<UndirListGraphBase> > IterableUndirListGraph; |
21 |
22 |
38 |
39 |
39 checkConcept<UndirGraph, UndirSmartGraph>(); |
40 checkConcept<UndirGraph, UndirSmartGraph>(); |
40 checkConcept<ExtendableUndirGraph, UndirSmartGraph>(); |
41 checkConcept<ExtendableUndirGraph, UndirSmartGraph>(); |
41 |
42 |
42 checkConcept<UndirGraph, UndirGraph>(); |
43 checkConcept<UndirGraph, UndirGraph>(); |
|
44 } |
|
45 |
|
46 typedef UndirListGraph Graph; |
|
47 typedef Graph::Node Node; |
|
48 typedef Graph::UndirEdge UEdge; |
|
49 typedef Graph::Edge Edge; |
|
50 typedef Graph::NodeIt NodeIt; |
|
51 typedef Graph::UndirEdgeIt UEdgeIt; |
|
52 typedef Graph::EdgeIt EdgeIt; |
|
53 |
|
54 void check_item_counts(Graph &g, int n, int e) { |
|
55 check(countNodes(g)==n, "Wrong node number."); |
|
56 check(countEdges(g)==2*e, "Wrong edge number."); |
|
57 } |
|
58 |
|
59 void print_items(Graph &g) { |
|
60 cout << "Nodes" << endl; |
|
61 int i=0; |
|
62 for(NodeIt it(g); it!=INVALID; ++it, ++i) { |
|
63 cout << " " << i << ": " << g.id(it) << endl; |
|
64 } |
|
65 |
|
66 cout << "UndirEdge" << endl; |
|
67 i=0; |
|
68 for(UEdgeIt it(g); it!=INVALID; ++it, ++i) { |
|
69 cout << " " << i << ": " << g.id(it) |
|
70 << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) |
|
71 << ")" << endl; |
|
72 } |
|
73 |
|
74 cout << "Edge" << endl; |
|
75 i=0; |
|
76 for(EdgeIt it(g); it!=INVALID; ++it, ++i) { |
|
77 cout << " " << i << ": " << g.id(it) |
|
78 << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) |
|
79 << ")" << endl; |
|
80 } |
|
81 |
|
82 } |
|
83 |
|
84 int main() { |
|
85 check_concepts(); |
|
86 |
|
87 |
|
88 Graph g; |
|
89 |
|
90 check_item_counts(g,0,0); |
|
91 |
|
92 Node |
|
93 n1 = g.addNode(), |
|
94 n2 = g.addNode(), |
|
95 n3 = g.addNode(); |
|
96 |
|
97 UEdge |
|
98 e1 = g.addEdge(n1, n2), |
|
99 e2 = g.addEdge(n2, n3); |
|
100 |
|
101 // print_items(g); |
|
102 |
|
103 check_item_counts(g,3,2); |
43 |
104 |
44 return 0; |
105 return 0; |
45 } |
106 } |