22 //#include <lemon/full_graph.h> |
22 //#include <lemon/full_graph.h> |
23 //#include <lemon/hypercube_graph.h> |
23 //#include <lemon/hypercube_graph.h> |
24 |
24 |
25 #include "test_tools.h" |
25 #include "test_tools.h" |
26 #include "graph_test.h" |
26 #include "graph_test.h" |
27 #include "graph_maps_test.h" |
|
28 |
27 |
29 using namespace lemon; |
28 using namespace lemon; |
30 using namespace lemon::concepts; |
29 using namespace lemon::concepts; |
31 |
30 |
32 void check_concepts() { |
31 template <class Digraph> |
|
32 void checkDigraph() { |
|
33 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph); |
|
34 Digraph G; |
|
35 |
|
36 checkGraphNodeList(G, 0); |
|
37 checkGraphArcList(G, 0); |
|
38 |
|
39 Node |
|
40 n1 = G.addNode(), |
|
41 n2 = G.addNode(), |
|
42 n3 = G.addNode(); |
|
43 checkGraphNodeList(G, 3); |
|
44 checkGraphArcList(G, 0); |
|
45 |
|
46 Arc a1 = G.addArc(n1, n2); |
|
47 check(G.source(a1) == n1 && G.target(a1) == n2, "Wrong arc"); |
|
48 checkGraphNodeList(G, 3); |
|
49 checkGraphArcList(G, 1); |
|
50 |
|
51 checkGraphOutArcList(G, n1, 1); |
|
52 checkGraphOutArcList(G, n2, 0); |
|
53 checkGraphOutArcList(G, n3, 0); |
|
54 |
|
55 checkGraphInArcList(G, n1, 0); |
|
56 checkGraphInArcList(G, n2, 1); |
|
57 checkGraphInArcList(G, n3, 0); |
|
58 |
|
59 checkGraphConArcList(G, 1); |
|
60 |
|
61 Arc a2 = G.addArc(n2, n1), a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3); |
|
62 checkGraphNodeList(G, 3); |
|
63 checkGraphArcList(G, 4); |
|
64 |
|
65 checkGraphOutArcList(G, n1, 1); |
|
66 checkGraphOutArcList(G, n2, 3); |
|
67 checkGraphOutArcList(G, n3, 0); |
|
68 |
|
69 checkGraphInArcList(G, n1, 1); |
|
70 checkGraphInArcList(G, n2, 1); |
|
71 checkGraphInArcList(G, n3, 2); |
|
72 |
|
73 checkGraphConArcList(G, 4); |
|
74 |
|
75 checkNodeIds(G); |
|
76 checkArcIds(G); |
|
77 checkGraphNodeMap(G); |
|
78 checkGraphArcMap(G); |
|
79 |
|
80 } |
|
81 |
|
82 |
|
83 void checkConcepts() { |
33 { // Checking digraph components |
84 { // Checking digraph components |
34 checkConcept<BaseDigraphComponent, BaseDigraphComponent >(); |
85 checkConcept<BaseDigraphComponent, BaseDigraphComponent >(); |
35 |
86 |
36 checkConcept<IDableDigraphComponent<>, |
87 checkConcept<IDableDigraphComponent<>, |
37 IDableDigraphComponent<> >(); |
88 IDableDigraphComponent<> >(); |
49 checkConcept<Digraph, ListDigraph>(); |
100 checkConcept<Digraph, ListDigraph>(); |
50 checkConcept<AlterableDigraphComponent<>, ListDigraph>(); |
101 checkConcept<AlterableDigraphComponent<>, ListDigraph>(); |
51 checkConcept<ExtendableDigraphComponent<>, ListDigraph>(); |
102 checkConcept<ExtendableDigraphComponent<>, ListDigraph>(); |
52 checkConcept<ClearableDigraphComponent<>, ListDigraph>(); |
103 checkConcept<ClearableDigraphComponent<>, ListDigraph>(); |
53 checkConcept<ErasableDigraphComponent<>, ListDigraph>(); |
104 checkConcept<ErasableDigraphComponent<>, ListDigraph>(); |
54 checkDigraphIterators<ListDigraph>(); |
|
55 } |
105 } |
56 { // Checking SmartDigraph |
106 { // Checking SmartDigraph |
57 checkConcept<Digraph, SmartDigraph>(); |
107 checkConcept<Digraph, SmartDigraph>(); |
58 checkConcept<AlterableDigraphComponent<>, SmartDigraph>(); |
108 checkConcept<AlterableDigraphComponent<>, SmartDigraph>(); |
59 checkConcept<ExtendableDigraphComponent<>, SmartDigraph>(); |
109 checkConcept<ExtendableDigraphComponent<>, SmartDigraph>(); |
60 checkConcept<ClearableDigraphComponent<>, SmartDigraph>(); |
110 checkConcept<ClearableDigraphComponent<>, SmartDigraph>(); |
61 checkDigraphIterators<SmartDigraph>(); |
|
62 } |
111 } |
63 // { // Checking FullDigraph |
112 // { // Checking FullDigraph |
64 // checkConcept<Digraph, FullDigraph>(); |
113 // checkConcept<Digraph, FullDigraph>(); |
65 // checkDigraphIterators<FullDigraph>(); |
|
66 // } |
114 // } |
67 // { // Checking HyperCubeDigraph |
115 // { // Checking HyperCubeDigraph |
68 // checkConcept<Digraph, HyperCubeDigraph>(); |
116 // checkConcept<Digraph, HyperCubeDigraph>(); |
69 // checkDigraphIterators<HyperCubeDigraph>(); |
|
70 // } |
117 // } |
71 } |
118 } |
72 |
119 |
73 template <typename Digraph> |
120 template <typename Digraph> |
74 void check_graph_validity() { |
121 void checkDigraphValidity() { |
75 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph); |
122 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph); |
76 Digraph g; |
123 Digraph g; |
77 |
124 |
78 Node |
125 Node |
79 n1 = g.addNode(), |
126 n1 = g.addNode(), |
118 |
165 |
119 check(!g.valid(g.nodeFromId(-1)), "Wrong validity check"); |
166 check(!g.valid(g.nodeFromId(-1)), "Wrong validity check"); |
120 check(!g.valid(g.arcFromId(-1)), "Wrong validity check"); |
167 check(!g.valid(g.arcFromId(-1)), "Wrong validity check"); |
121 } |
168 } |
122 |
169 |
123 void check_digraphs() { |
170 void checkDigraphs() { |
124 { // Checking ListDigraph |
171 { // Checking ListDigraph |
125 checkDigraph<ListDigraph>(); |
172 checkDigraph<ListDigraph>(); |
126 checkGraphNodeMap<ListDigraph>(); |
173 checkDigraphValidityErase<ListDigraph>(); |
127 checkGraphArcMap<ListDigraph>(); |
|
128 |
|
129 check_graph_validity_erase<ListDigraph>(); |
|
130 } |
174 } |
131 { // Checking SmartDigraph |
175 { // Checking SmartDigraph |
132 checkDigraph<SmartDigraph>(); |
176 checkDigraph<SmartDigraph>(); |
133 checkGraphNodeMap<SmartDigraph>(); |
177 checkDigraphValidity<SmartDigraph>(); |
134 checkGraphArcMap<SmartDigraph>(); |
|
135 |
|
136 check_graph_validity<SmartDigraph>(); |
|
137 } |
178 } |
138 } |
179 } |
139 |
180 |
140 int main() { |
181 int main() { |
141 check_concepts(); |
182 checkDigraphs(); |
142 check_digraphs(); |
183 checkConcepts(); |
143 return 0; |
184 return 0; |
144 } |
185 } |