1.1 --- a/test/graph_adaptor_test.cc Sun Nov 30 19:00:30 2008 +0100
1.2 +++ b/test/graph_adaptor_test.cc Sun Nov 30 19:18:32 2008 +0100
1.3 @@ -1,6 +1,6 @@
1.4 -/* -*- C++ -*-
1.5 +/* -*- mode: C++; indent-tabs-mode: nil; -*-
1.6 *
1.7 - * This file is a part of LEMON, a generic C++ optimization library
1.8 + * This file is a part of LEMON, a generic C++ optimization library.
1.9 *
1.10 * Copyright (C) 2003-2008
1.11 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
1.12 @@ -25,8 +25,7 @@
1.13 #include<lemon/concepts/digraph.h>
1.14 #include<lemon/concepts/graph.h>
1.15
1.16 -#include<lemon/digraph_adaptor.h>
1.17 -#include<lemon/graph_adaptor.h>
1.18 +#include<lemon/adaptors.h>
1.19
1.20 #include <limits>
1.21 #include <lemon/bfs.h>
1.22 @@ -37,11 +36,11 @@
1.23
1.24 using namespace lemon;
1.25
1.26 -void checkRevDigraphAdaptor() {
1.27 - checkConcept<concepts::Digraph, RevDigraphAdaptor<concepts::Digraph> >();
1.28 +void checkReverseDigraph() {
1.29 + checkConcept<concepts::Digraph, ReverseDigraph<concepts::Digraph> >();
1.30
1.31 typedef ListDigraph Digraph;
1.32 - typedef RevDigraphAdaptor<Digraph> Adaptor;
1.33 + typedef ReverseDigraph<Digraph> Adaptor;
1.34
1.35 Digraph digraph;
1.36 Adaptor adaptor(digraph);
1.37 @@ -53,7 +52,7 @@
1.38 Digraph::Arc a1 = digraph.addArc(n1, n2);
1.39 Digraph::Arc a2 = digraph.addArc(n1, n3);
1.40 Digraph::Arc a3 = digraph.addArc(n2, n3);
1.41 -
1.42 +
1.43 checkGraphNodeList(adaptor, 3);
1.44 checkGraphArcList(adaptor, 3);
1.45 checkGraphConArcList(adaptor, 3);
1.46 @@ -78,16 +77,16 @@
1.47 }
1.48 }
1.49
1.50 -void checkSubDigraphAdaptor() {
1.51 - checkConcept<concepts::Digraph,
1.52 - SubDigraphAdaptor<concepts::Digraph,
1.53 +void checkSubDigraph() {
1.54 + checkConcept<concepts::Digraph,
1.55 + SubDigraph<concepts::Digraph,
1.56 concepts::Digraph::NodeMap<bool>,
1.57 concepts::Digraph::ArcMap<bool> > >();
1.58
1.59 typedef ListDigraph Digraph;
1.60 typedef Digraph::NodeMap<bool> NodeFilter;
1.61 typedef Digraph::ArcMap<bool> ArcFilter;
1.62 - typedef SubDigraphAdaptor<Digraph, NodeFilter, ArcFilter> Adaptor;
1.63 + typedef SubDigraph<Digraph, NodeFilter, ArcFilter> Adaptor;
1.64
1.65 Digraph digraph;
1.66 NodeFilter node_filter(digraph);
1.67 @@ -123,7 +122,7 @@
1.68 checkGraphNodeMap(adaptor);
1.69 checkGraphArcMap(adaptor);
1.70
1.71 - arc_filter[a2] = false;
1.72 + arc_filter[a2] = false;
1.73
1.74 checkGraphNodeList(adaptor, 3);
1.75 checkGraphArcList(adaptor, 2);
1.76 @@ -143,7 +142,7 @@
1.77 checkGraphNodeMap(adaptor);
1.78 checkGraphArcMap(adaptor);
1.79
1.80 - node_filter[n1] = false;
1.81 + node_filter[n1] = false;
1.82
1.83 checkGraphNodeList(adaptor, 2);
1.84 checkGraphArcList(adaptor, 1);
1.85 @@ -175,14 +174,14 @@
1.86 checkGraphArcMap(adaptor);
1.87 }
1.88
1.89 -void checkNodeSubDigraphAdaptor() {
1.90 - checkConcept<concepts::Digraph,
1.91 - NodeSubDigraphAdaptor<concepts::Digraph,
1.92 +void checkFilterNodes1() {
1.93 + checkConcept<concepts::Digraph,
1.94 + FilterNodes<concepts::Digraph,
1.95 concepts::Digraph::NodeMap<bool> > >();
1.96
1.97 typedef ListDigraph Digraph;
1.98 typedef Digraph::NodeMap<bool> NodeFilter;
1.99 - typedef NodeSubDigraphAdaptor<Digraph, NodeFilter> Adaptor;
1.100 + typedef FilterNodes<Digraph, NodeFilter> Adaptor;
1.101
1.102 Digraph digraph;
1.103 NodeFilter node_filter(digraph);
1.104 @@ -216,7 +215,7 @@
1.105 checkGraphNodeMap(adaptor);
1.106 checkGraphArcMap(adaptor);
1.107
1.108 - node_filter[n1] = false;
1.109 + node_filter[n1] = false;
1.110
1.111 checkGraphNodeList(adaptor, 2);
1.112 checkGraphArcList(adaptor, 1);
1.113 @@ -247,14 +246,14 @@
1.114 checkGraphArcMap(adaptor);
1.115 }
1.116
1.117 -void checkArcSubDigraphAdaptor() {
1.118 - checkConcept<concepts::Digraph,
1.119 - ArcSubDigraphAdaptor<concepts::Digraph,
1.120 +void checkFilterArcs() {
1.121 + checkConcept<concepts::Digraph,
1.122 + FilterArcs<concepts::Digraph,
1.123 concepts::Digraph::ArcMap<bool> > >();
1.124
1.125 typedef ListDigraph Digraph;
1.126 typedef Digraph::ArcMap<bool> ArcFilter;
1.127 - typedef ArcSubDigraphAdaptor<Digraph, ArcFilter> Adaptor;
1.128 + typedef FilterArcs<Digraph, ArcFilter> Adaptor;
1.129
1.130 Digraph digraph;
1.131 ArcFilter arc_filter(digraph);
1.132 @@ -288,7 +287,7 @@
1.133 checkGraphNodeMap(adaptor);
1.134 checkGraphArcMap(adaptor);
1.135
1.136 - arc_filter[a2] = false;
1.137 + arc_filter[a2] = false;
1.138
1.139 checkGraphNodeList(adaptor, 3);
1.140 checkGraphArcList(adaptor, 2);
1.141 @@ -321,11 +320,11 @@
1.142 checkGraphArcMap(adaptor);
1.143 }
1.144
1.145 -void checkUndirDigraphAdaptor() {
1.146 - checkConcept<concepts::Graph, UndirDigraphAdaptor<concepts::Digraph> >();
1.147 +void checkUndirector() {
1.148 + checkConcept<concepts::Graph, Undirector<concepts::Digraph> >();
1.149
1.150 typedef ListDigraph Digraph;
1.151 - typedef UndirDigraphAdaptor<Digraph> Adaptor;
1.152 + typedef Undirector<Digraph> Adaptor;
1.153
1.154 Digraph digraph;
1.155 Adaptor adaptor(digraph);
1.156 @@ -337,7 +336,7 @@
1.157 Digraph::Arc a1 = digraph.addArc(n1, n2);
1.158 Digraph::Arc a2 = digraph.addArc(n1, n3);
1.159 Digraph::Arc a3 = digraph.addArc(n2, n3);
1.160 -
1.161 +
1.162 checkGraphNodeList(adaptor, 3);
1.163 checkGraphArcList(adaptor, 6);
1.164 checkGraphEdgeList(adaptor, 3);
1.165 @@ -371,15 +370,15 @@
1.166
1.167 }
1.168
1.169 -void checkResDigraphAdaptor() {
1.170 - checkConcept<concepts::Digraph,
1.171 - ResDigraphAdaptor<concepts::Digraph,
1.172 - concepts::Digraph::ArcMap<int>,
1.173 +void checkResidual() {
1.174 + checkConcept<concepts::Digraph,
1.175 + Residual<concepts::Digraph,
1.176 + concepts::Digraph::ArcMap<int>,
1.177 concepts::Digraph::ArcMap<int> > >();
1.178
1.179 typedef ListDigraph Digraph;
1.180 typedef Digraph::ArcMap<int> IntArcMap;
1.181 - typedef ResDigraphAdaptor<Digraph, IntArcMap> Adaptor;
1.182 + typedef Residual<Digraph, IntArcMap> Adaptor;
1.183
1.184 Digraph digraph;
1.185 IntArcMap capacity(digraph), flow(digraph);
1.186 @@ -407,7 +406,7 @@
1.187 for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.188 flow[a] = 0;
1.189 }
1.190 -
1.191 +
1.192 checkGraphNodeList(adaptor, 4);
1.193 checkGraphArcList(adaptor, 6);
1.194 checkGraphConArcList(adaptor, 6);
1.195 @@ -425,7 +424,7 @@
1.196 for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.197 flow[a] = capacity[a] / 2;
1.198 }
1.199 -
1.200 +
1.201 checkGraphNodeList(adaptor, 4);
1.202 checkGraphArcList(adaptor, 12);
1.203 checkGraphConArcList(adaptor, 12);
1.204 @@ -449,7 +448,7 @@
1.205 for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.206 flow[a] = capacity[a];
1.207 }
1.208 -
1.209 +
1.210 checkGraphNodeList(adaptor, 4);
1.211 checkGraphArcList(adaptor, 6);
1.212 checkGraphConArcList(adaptor, 6);
1.213 @@ -470,17 +469,18 @@
1.214
1.215 int flow_value = 0;
1.216 while (true) {
1.217 -
1.218 +
1.219 Bfs<Adaptor> bfs(adaptor);
1.220 bfs.run(n1, n4);
1.221 -
1.222 +
1.223 if (!bfs.reached(n4)) break;
1.224
1.225 Path<Adaptor> p = bfs.path(n4);
1.226 -
1.227 +
1.228 int min = std::numeric_limits<int>::max();
1.229 for (Path<Adaptor>::ArcIt a(p); a != INVALID; ++a) {
1.230 - if (adaptor.rescap(a) < min) min = adaptor.rescap(a);
1.231 + if (adaptor.residualCapacity(a) < min)
1.232 + min = adaptor.residualCapacity(a);
1.233 }
1.234
1.235 for (Path<Adaptor>::ArcIt a(p); a != INVALID; ++a) {
1.236 @@ -493,11 +493,11 @@
1.237
1.238 }
1.239
1.240 -void checkSplitDigraphAdaptor() {
1.241 - checkConcept<concepts::Digraph, SplitDigraphAdaptor<concepts::Digraph> >();
1.242 +void checkSplitNodes() {
1.243 + checkConcept<concepts::Digraph, SplitNodes<concepts::Digraph> >();
1.244
1.245 typedef ListDigraph Digraph;
1.246 - typedef SplitDigraphAdaptor<Digraph> Adaptor;
1.247 + typedef SplitNodes<Digraph> Adaptor;
1.248
1.249 Digraph digraph;
1.250 Adaptor adaptor(digraph);
1.251 @@ -509,7 +509,7 @@
1.252 Digraph::Arc a1 = digraph.addArc(n1, n2);
1.253 Digraph::Arc a2 = digraph.addArc(n1, n3);
1.254 Digraph::Arc a3 = digraph.addArc(n2, n3);
1.255 -
1.256 +
1.257 checkGraphNodeList(adaptor, 6);
1.258 checkGraphArcList(adaptor, 6);
1.259 checkGraphConArcList(adaptor, 6);
1.260 @@ -530,17 +530,17 @@
1.261
1.262 checkNodeIds(adaptor);
1.263 checkArcIds(adaptor);
1.264 -
1.265 +
1.266 checkGraphNodeMap(adaptor);
1.267 checkGraphArcMap(adaptor);
1.268
1.269 for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.270 if (adaptor.origArc(a)) {
1.271 Digraph::Arc oa = a;
1.272 - check(adaptor.source(a) == adaptor.outNode(digraph.source(oa)),
1.273 - "Wrong split");
1.274 - check(adaptor.target(a) == adaptor.inNode(digraph.target(oa)),
1.275 - "Wrong split");
1.276 + check(adaptor.source(a) == adaptor.outNode(digraph.source(oa)),
1.277 + "Wrong split");
1.278 + check(adaptor.target(a) == adaptor.inNode(digraph.target(oa)),
1.279 + "Wrong split");
1.280 } else {
1.281 Digraph::Node on = a;
1.282 check(adaptor.source(a) == adaptor.inNode(on), "Wrong split");
1.283 @@ -549,16 +549,16 @@
1.284 }
1.285 }
1.286
1.287 -void checkSubGraphAdaptor() {
1.288 - checkConcept<concepts::Graph,
1.289 - SubGraphAdaptor<concepts::Graph,
1.290 +void checkSubGraph() {
1.291 + checkConcept<concepts::Graph,
1.292 + SubGraph<concepts::Graph,
1.293 concepts::Graph::NodeMap<bool>,
1.294 concepts::Graph::EdgeMap<bool> > >();
1.295
1.296 typedef ListGraph Graph;
1.297 typedef Graph::NodeMap<bool> NodeFilter;
1.298 typedef Graph::EdgeMap<bool> EdgeFilter;
1.299 - typedef SubGraphAdaptor<Graph, NodeFilter, EdgeFilter> Adaptor;
1.300 + typedef SubGraph<Graph, NodeFilter, EdgeFilter> Adaptor;
1.301
1.302 Graph graph;
1.303 NodeFilter node_filter(graph);
1.304 @@ -607,7 +607,7 @@
1.305 checkGraphArcMap(adaptor);
1.306 checkGraphEdgeMap(adaptor);
1.307
1.308 - edge_filter[e2] = false;
1.309 + edge_filter[e2] = false;
1.310
1.311 checkGraphNodeList(adaptor, 4);
1.312 checkGraphArcList(adaptor, 6);
1.313 @@ -638,7 +638,7 @@
1.314 checkGraphArcMap(adaptor);
1.315 checkGraphEdgeMap(adaptor);
1.316
1.317 - node_filter[n1] = false;
1.318 + node_filter[n1] = false;
1.319
1.320 checkGraphNodeList(adaptor, 3);
1.321 checkGraphArcList(adaptor, 4);
1.322 @@ -684,14 +684,14 @@
1.323 checkGraphEdgeMap(adaptor);
1.324 }
1.325
1.326 -void checkNodeSubGraphAdaptor() {
1.327 - checkConcept<concepts::Graph,
1.328 - NodeSubGraphAdaptor<concepts::Graph,
1.329 +void checkFilterNodes2() {
1.330 + checkConcept<concepts::Graph,
1.331 + FilterNodes<concepts::Graph,
1.332 concepts::Graph::NodeMap<bool> > >();
1.333
1.334 typedef ListGraph Graph;
1.335 typedef Graph::NodeMap<bool> NodeFilter;
1.336 - typedef NodeSubGraphAdaptor<Graph, NodeFilter> Adaptor;
1.337 + typedef FilterNodes<Graph, NodeFilter> Adaptor;
1.338
1.339 Graph graph;
1.340 NodeFilter node_filter(graph);
1.341 @@ -738,7 +738,7 @@
1.342 checkGraphArcMap(adaptor);
1.343 checkGraphEdgeMap(adaptor);
1.344
1.345 - node_filter[n1] = false;
1.346 + node_filter[n1] = false;
1.347
1.348 checkGraphNodeList(adaptor, 3);
1.349 checkGraphArcList(adaptor, 4);
1.350 @@ -783,14 +783,14 @@
1.351 checkGraphEdgeMap(adaptor);
1.352 }
1.353
1.354 -void checkEdgeSubGraphAdaptor() {
1.355 - checkConcept<concepts::Graph,
1.356 - EdgeSubGraphAdaptor<concepts::Graph,
1.357 +void checkFilterEdges() {
1.358 + checkConcept<concepts::Graph,
1.359 + FilterEdges<concepts::Graph,
1.360 concepts::Graph::EdgeMap<bool> > >();
1.361
1.362 typedef ListGraph Graph;
1.363 typedef Graph::EdgeMap<bool> EdgeFilter;
1.364 - typedef EdgeSubGraphAdaptor<Graph, EdgeFilter> Adaptor;
1.365 + typedef FilterEdges<Graph, EdgeFilter> Adaptor;
1.366
1.367 Graph graph;
1.368 EdgeFilter edge_filter(graph);
1.369 @@ -837,7 +837,7 @@
1.370 checkGraphArcMap(adaptor);
1.371 checkGraphEdgeMap(adaptor);
1.372
1.373 - edge_filter[e2] = false;
1.374 + edge_filter[e2] = false;
1.375
1.376 checkGraphNodeList(adaptor, 4);
1.377 checkGraphArcList(adaptor, 6);
1.378 @@ -885,13 +885,13 @@
1.379 checkGraphEdgeMap(adaptor);
1.380 }
1.381
1.382 -void checkDirGraphAdaptor() {
1.383 - checkConcept<concepts::Digraph,
1.384 - DirGraphAdaptor<concepts::Graph, concepts::Graph::EdgeMap<bool> > >();
1.385 +void checkOrienter() {
1.386 + checkConcept<concepts::Digraph,
1.387 + Orienter<concepts::Graph, concepts::Graph::EdgeMap<bool> > >();
1.388
1.389 typedef ListGraph Graph;
1.390 typedef ListGraph::EdgeMap<bool> DirMap;
1.391 - typedef DirGraphAdaptor<Graph> Adaptor;
1.392 + typedef Orienter<Graph> Adaptor;
1.393
1.394 Graph graph;
1.395 DirMap dir(graph, true);
1.396 @@ -904,16 +904,16 @@
1.397 Graph::Edge e1 = graph.addEdge(n1, n2);
1.398 Graph::Edge e2 = graph.addEdge(n1, n3);
1.399 Graph::Edge e3 = graph.addEdge(n2, n3);
1.400 -
1.401 +
1.402 checkGraphNodeList(adaptor, 3);
1.403 checkGraphArcList(adaptor, 3);
1.404 checkGraphConArcList(adaptor, 3);
1.405 -
1.406 +
1.407 {
1.408 dir[e1] = true;
1.409 Adaptor::Node u = adaptor.source(e1);
1.410 Adaptor::Node v = adaptor.target(e1);
1.411 -
1.412 +
1.413 dir[e1] = false;
1.414 check (u == adaptor.target(e1), "Wrong dir");
1.415 check (v == adaptor.source(e1), "Wrong dir");
1.416 @@ -926,7 +926,7 @@
1.417 dir[e2] = true;
1.418 Adaptor::Node u = adaptor.source(e2);
1.419 Adaptor::Node v = adaptor.target(e2);
1.420 -
1.421 +
1.422 dir[e2] = false;
1.423 check (u == adaptor.target(e2), "Wrong dir");
1.424 check (v == adaptor.source(e2), "Wrong dir");
1.425 @@ -939,7 +939,7 @@
1.426 dir[e3] = true;
1.427 Adaptor::Node u = adaptor.source(e3);
1.428 Adaptor::Node v = adaptor.target(e3);
1.429 -
1.430 +
1.431 dir[e3] = false;
1.432 check (u == adaptor.target(e3), "Wrong dir");
1.433 check (v == adaptor.source(e3), "Wrong dir");
1.434 @@ -967,18 +967,18 @@
1.435
1.436 int main(int, const char **) {
1.437
1.438 - checkRevDigraphAdaptor();
1.439 - checkSubDigraphAdaptor();
1.440 - checkNodeSubDigraphAdaptor();
1.441 - checkArcSubDigraphAdaptor();
1.442 - checkUndirDigraphAdaptor();
1.443 - checkResDigraphAdaptor();
1.444 - checkSplitDigraphAdaptor();
1.445 + checkReverseDigraph();
1.446 + checkSubDigraph();
1.447 + checkFilterNodes1();
1.448 + checkFilterArcs();
1.449 + checkUndirector();
1.450 + checkResidual();
1.451 + checkSplitNodes();
1.452
1.453 - checkSubGraphAdaptor();
1.454 - checkNodeSubGraphAdaptor();
1.455 - checkEdgeSubGraphAdaptor();
1.456 - checkDirGraphAdaptor();
1.457 + checkSubGraph();
1.458 + checkFilterNodes2();
1.459 + checkFilterEdges();
1.460 + checkOrienter();
1.461
1.462 return 0;
1.463 }