test/graph_adaptor_test.cc
changeset 432 76287c8caa26
parent 431 4b6112235fad
child 463 88ed40ad0d4f
     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  }