test/maps_test.cc
changeset 956 141f9c0db4a3
parent 836 8ddb7deabab9
child 1057 633956ca9421
     1.1 --- a/test/maps_test.cc	Wed Mar 17 12:35:52 2010 +0100
     1.2 +++ b/test/maps_test.cc	Sat Mar 06 14:35:12 2010 +0000
     1.3 @@ -2,7 +2,7 @@
     1.4   *
     1.5   * This file is a part of LEMON, a generic C++ optimization library.
     1.6   *
     1.7 - * Copyright (C) 2003-2009
     1.8 + * Copyright (C) 2003-2010
     1.9   * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
    1.10   * (Egervary Research Group on Combinatorial Optimization, EGRES).
    1.11   *
    1.12 @@ -225,7 +225,8 @@
    1.13      B b = functorToMap(F())[A()];
    1.14  
    1.15      checkConcept<ReadMap<A,B>, MapToFunctor<ReadMap<A,B> > >();
    1.16 -    MapToFunctor<ReadMap<A,B> > map = MapToFunctor<ReadMap<A,B> >(ReadMap<A,B>());
    1.17 +    MapToFunctor<ReadMap<A,B> > map =
    1.18 +      MapToFunctor<ReadMap<A,B> >(ReadMap<A,B>());
    1.19  
    1.20      check(functorToMap(&func)[A()] == 3,
    1.21            "Something is wrong with FunctorToMap");
    1.22 @@ -377,7 +378,7 @@
    1.23      for ( LoggerBoolMap<vec::iterator>::Iterator it = map2.begin();
    1.24            it != map2.end(); ++it )
    1.25        check(v1[i++] == *it, "Something is wrong with LoggerBoolMap");
    1.26 -    
    1.27 +
    1.28      typedef ListDigraph Graph;
    1.29      DIGRAPH_TYPEDEFS(Graph);
    1.30      Graph gr;
    1.31 @@ -386,13 +387,13 @@
    1.32      Node n1 = gr.addNode();
    1.33      Node n2 = gr.addNode();
    1.34      Node n3 = gr.addNode();
    1.35 -    
    1.36 +
    1.37      gr.addArc(n3, n0);
    1.38      gr.addArc(n3, n2);
    1.39      gr.addArc(n0, n2);
    1.40      gr.addArc(n2, n1);
    1.41      gr.addArc(n0, n1);
    1.42 -    
    1.43 +
    1.44      {
    1.45        std::vector<Node> v;
    1.46        dfs(gr).processedMap(loggerBoolMap(std::back_inserter(v))).run();
    1.47 @@ -403,12 +404,12 @@
    1.48      {
    1.49        std::vector<Node> v(countNodes(gr));
    1.50        dfs(gr).processedMap(loggerBoolMap(v.begin())).run();
    1.51 -      
    1.52 +
    1.53        check(v.size()==4 && v[0]==n1 && v[1]==n2 && v[2]==n0 && v[3]==n3,
    1.54              "Something is wrong with LoggerBoolMap");
    1.55      }
    1.56    }
    1.57 -  
    1.58 +
    1.59    // IdMap, RangeIdMap
    1.60    {
    1.61      typedef ListDigraph Graph;
    1.62 @@ -418,22 +419,22 @@
    1.63      checkConcept<ReadMap<Arc, int>, IdMap<Graph, Arc> >();
    1.64      checkConcept<ReadMap<Node, int>, RangeIdMap<Graph, Node> >();
    1.65      checkConcept<ReadMap<Arc, int>, RangeIdMap<Graph, Arc> >();
    1.66 -    
    1.67 +
    1.68      Graph gr;
    1.69      IdMap<Graph, Node> nmap(gr);
    1.70      IdMap<Graph, Arc> amap(gr);
    1.71      RangeIdMap<Graph, Node> nrmap(gr);
    1.72      RangeIdMap<Graph, Arc> armap(gr);
    1.73 -    
    1.74 +
    1.75      Node n0 = gr.addNode();
    1.76      Node n1 = gr.addNode();
    1.77      Node n2 = gr.addNode();
    1.78 -    
    1.79 +
    1.80      Arc a0 = gr.addArc(n0, n1);
    1.81      Arc a1 = gr.addArc(n0, n2);
    1.82      Arc a2 = gr.addArc(n2, n1);
    1.83      Arc a3 = gr.addArc(n2, n0);
    1.84 -    
    1.85 +
    1.86      check(nmap[n0] == gr.id(n0) && nmap(gr.id(n0)) == n0, "Wrong IdMap");
    1.87      check(nmap[n1] == gr.id(n1) && nmap(gr.id(n1)) == n1, "Wrong IdMap");
    1.88      check(nmap[n2] == gr.id(n2) && nmap(gr.id(n2)) == n2, "Wrong IdMap");
    1.89 @@ -445,14 +446,14 @@
    1.90  
    1.91      check(nmap.inverse()[gr.id(n0)] == n0, "Wrong IdMap::InverseMap");
    1.92      check(amap.inverse()[gr.id(a0)] == a0, "Wrong IdMap::InverseMap");
    1.93 -    
    1.94 +
    1.95      check(nrmap.size() == 3 && armap.size() == 4,
    1.96            "Wrong RangeIdMap::size()");
    1.97  
    1.98      check(nrmap[n0] == 0 && nrmap(0) == n0, "Wrong RangeIdMap");
    1.99      check(nrmap[n1] == 1 && nrmap(1) == n1, "Wrong RangeIdMap");
   1.100      check(nrmap[n2] == 2 && nrmap(2) == n2, "Wrong RangeIdMap");
   1.101 -    
   1.102 +
   1.103      check(armap[a0] == 0 && armap(0) == a0, "Wrong RangeIdMap");
   1.104      check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
   1.105      check(armap[a2] == 2 && armap(2) == a2, "Wrong RangeIdMap");
   1.106 @@ -460,32 +461,32 @@
   1.107  
   1.108      check(nrmap.inverse()[0] == n0, "Wrong RangeIdMap::InverseMap");
   1.109      check(armap.inverse()[0] == a0, "Wrong RangeIdMap::InverseMap");
   1.110 -    
   1.111 +
   1.112      gr.erase(n1);
   1.113 -    
   1.114 +
   1.115      if (nrmap[n0] == 1) nrmap.swap(n0, n2);
   1.116      nrmap.swap(n2, n0);
   1.117      if (armap[a1] == 1) armap.swap(a1, a3);
   1.118      armap.swap(a3, a1);
   1.119 -    
   1.120 +
   1.121      check(nrmap.size() == 2 && armap.size() == 2,
   1.122            "Wrong RangeIdMap::size()");
   1.123  
   1.124      check(nrmap[n0] == 1 && nrmap(1) == n0, "Wrong RangeIdMap");
   1.125      check(nrmap[n2] == 0 && nrmap(0) == n2, "Wrong RangeIdMap");
   1.126 -    
   1.127 +
   1.128      check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
   1.129      check(armap[a3] == 0 && armap(0) == a3, "Wrong RangeIdMap");
   1.130  
   1.131      check(nrmap.inverse()[0] == n2, "Wrong RangeIdMap::InverseMap");
   1.132      check(armap.inverse()[0] == a3, "Wrong RangeIdMap::InverseMap");
   1.133    }
   1.134 -  
   1.135 +
   1.136    // SourceMap, TargetMap, ForwardMap, BackwardMap, InDegMap, OutDegMap
   1.137    {
   1.138      typedef ListGraph Graph;
   1.139      GRAPH_TYPEDEFS(Graph);
   1.140 -    
   1.141 +
   1.142      checkConcept<ReadMap<Arc, Node>, SourceMap<Graph> >();
   1.143      checkConcept<ReadMap<Arc, Node>, TargetMap<Graph> >();
   1.144      checkConcept<ReadMap<Edge, Arc>, ForwardMap<Graph> >();
   1.145 @@ -497,19 +498,19 @@
   1.146      Node n0 = gr.addNode();
   1.147      Node n1 = gr.addNode();
   1.148      Node n2 = gr.addNode();
   1.149 -    
   1.150 +
   1.151      gr.addEdge(n0,n1);
   1.152      gr.addEdge(n1,n2);
   1.153      gr.addEdge(n0,n2);
   1.154      gr.addEdge(n2,n1);
   1.155      gr.addEdge(n1,n2);
   1.156      gr.addEdge(n0,n1);
   1.157 -    
   1.158 +
   1.159      for (EdgeIt e(gr); e != INVALID; ++e) {
   1.160        check(forwardMap(gr)[e] == gr.direct(e, true), "Wrong ForwardMap");
   1.161        check(backwardMap(gr)[e] == gr.direct(e, false), "Wrong BackwardMap");
   1.162      }
   1.163 -    
   1.164 +
   1.165      check(mapCompare(gr,
   1.166            sourceMap(orienter(gr, constMap<Edge, bool>(true))),
   1.167            targetMap(orienter(gr, constMap<Edge, bool>(false)))),
   1.168 @@ -519,16 +520,16 @@
   1.169      Digraph dgr(gr, constMap<Edge, bool>(true));
   1.170      OutDegMap<Digraph> odm(dgr);
   1.171      InDegMap<Digraph> idm(dgr);
   1.172 -    
   1.173 +
   1.174      check(odm[n0] == 3 && odm[n1] == 2 && odm[n2] == 1, "Wrong OutDegMap");
   1.175      check(idm[n0] == 0 && idm[n1] == 3 && idm[n2] == 3, "Wrong InDegMap");
   1.176 -   
   1.177 +
   1.178      gr.addEdge(n2, n0);
   1.179  
   1.180      check(odm[n0] == 3 && odm[n1] == 2 && odm[n2] == 2, "Wrong OutDegMap");
   1.181      check(idm[n0] == 1 && idm[n1] == 3 && idm[n2] == 3, "Wrong InDegMap");
   1.182    }
   1.183 -  
   1.184 +
   1.185    // CrossRefMap
   1.186    {
   1.187      typedef ListDigraph Graph;
   1.188 @@ -540,19 +541,19 @@
   1.189                   CrossRefMap<Graph, Node, bool> >();
   1.190      checkConcept<ReadWriteMap<Node, double>,
   1.191                   CrossRefMap<Graph, Node, double> >();
   1.192 -    
   1.193 +
   1.194      Graph gr;
   1.195      typedef CrossRefMap<Graph, Node, char> CRMap;
   1.196      CRMap map(gr);
   1.197 -    
   1.198 +
   1.199      Node n0 = gr.addNode();
   1.200      Node n1 = gr.addNode();
   1.201      Node n2 = gr.addNode();
   1.202 -    
   1.203 +
   1.204      map.set(n0, 'A');
   1.205      map.set(n1, 'B');
   1.206      map.set(n2, 'C');
   1.207 -    
   1.208 +
   1.209      check(map[n0] == 'A' && map('A') == n0 && map.inverse()['A'] == n0,
   1.210            "Wrong CrossRefMap");
   1.211      check(map[n1] == 'B' && map('B') == n1 && map.inverse()['B'] == n1,
   1.212 @@ -561,11 +562,11 @@
   1.213            "Wrong CrossRefMap");
   1.214      check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
   1.215            "Wrong CrossRefMap::count()");
   1.216 -    
   1.217 +
   1.218      CRMap::ValueIt it = map.beginValue();
   1.219      check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
   1.220            it == map.endValue(), "Wrong value iterator");
   1.221 -    
   1.222 +
   1.223      map.set(n2, 'A');
   1.224  
   1.225      check(map[n0] == 'A' && map[n1] == 'B' && map[n2] == 'A',
   1.226 @@ -603,16 +604,16 @@
   1.227  
   1.228      checkConcept<ReadWriteMap<Node, int>,
   1.229                   CrossRefMap<Graph, Node, int> >();
   1.230 -    
   1.231 +
   1.232      Graph gr;
   1.233      typedef CrossRefMap<Graph, Node, char> CRMap;
   1.234      typedef CRMap::ValueIterator ValueIt;
   1.235      CRMap map(gr);
   1.236 -    
   1.237 +
   1.238      Node n0 = gr.addNode();
   1.239      Node n1 = gr.addNode();
   1.240      Node n2 = gr.addNode();
   1.241 -    
   1.242 +
   1.243      map.set(n0, 'A');
   1.244      map.set(n1, 'B');
   1.245      map.set(n2, 'C');
   1.246 @@ -629,7 +630,7 @@
   1.247      check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
   1.248            it == map.endValue(), "Wrong value iterator");
   1.249    }
   1.250 -  
   1.251 +
   1.252    // Iterable bool map
   1.253    {
   1.254      typedef SmartGraph Graph;
   1.255 @@ -817,7 +818,7 @@
   1.256      check(n == num, "Wrong number");
   1.257  
   1.258    }
   1.259 -  
   1.260 +
   1.261    // Graph map utilities:
   1.262    // mapMin(), mapMax(), mapMinValue(), mapMaxValue()
   1.263    // mapFind(), mapFindIf(), mapCount(), mapCountIf()
   1.264 @@ -829,16 +830,16 @@
   1.265      Node n1 = g.addNode();
   1.266      Node n2 = g.addNode();
   1.267      Node n3 = g.addNode();
   1.268 -    
   1.269 +
   1.270      SmartDigraph::NodeMap<int> map1(g);
   1.271      SmartDigraph::ArcMap<char> map2(g);
   1.272      ConstMap<Node, A> cmap1 = A();
   1.273      ConstMap<Arc, C> cmap2 = C(0);
   1.274 -    
   1.275 +
   1.276      map1[n1] = 10;
   1.277      map1[n2] = 5;
   1.278      map1[n3] = 12;
   1.279 -    
   1.280 +
   1.281      // mapMin(), mapMax(), mapMinValue(), mapMaxValue()
   1.282      check(mapMin(g, map1) == n2, "Wrong mapMin()");
   1.283      check(mapMax(g, map1) == n3, "Wrong mapMax()");
   1.284 @@ -857,7 +858,7 @@
   1.285      Arc a2 = g.addArc(n1, n3);
   1.286      Arc a3 = g.addArc(n2, n3);
   1.287      Arc a4 = g.addArc(n3, n1);
   1.288 -    
   1.289 +
   1.290      map2[a1] = 'b';
   1.291      map2[a2] = 'a';
   1.292      map2[a3] = 'b';
   1.293 @@ -924,7 +925,7 @@
   1.294            "Wrong mapCountIf()");
   1.295      check(mapCountIf(g, map2, Less<char>('a')) == 0,
   1.296            "Wrong mapCountIf()");
   1.297 -     
   1.298 +
   1.299      // MapIt, ConstMapIt
   1.300  /*
   1.301  These tests can be used after applying bugfix #330
   1.302 @@ -934,7 +935,7 @@
   1.303            "Wrong NodeMap<>::MapIt");
   1.304      check(*std::max_element(ConstMapIt(map1), ConstMapIt(INVALID)) == 12,
   1.305            "Wrong NodeMap<>::MapIt");
   1.306 -    
   1.307 +
   1.308      int sum = 0;
   1.309      std::for_each(MapIt(map1), MapIt(INVALID), Sum<int>(sum));
   1.310      check(sum == 27, "Wrong NodeMap<>::MapIt");
   1.311 @@ -951,41 +952,41 @@
   1.312  
   1.313      SmartDigraph::NodeMap<int> map3(g, 0);
   1.314      SmartDigraph::ArcMap<char> map4(g, 'a');
   1.315 -    
   1.316 +
   1.317      check(!mapCompare(g, map1, map3), "Wrong mapCompare()");
   1.318 -    check(!mapCompare(g, map2, map4), "Wrong mapCompare()");    
   1.319 -    
   1.320 +    check(!mapCompare(g, map2, map4), "Wrong mapCompare()");
   1.321 +
   1.322      mapCopy(g, map1, map3);
   1.323      mapCopy(g, map2, map4);
   1.324  
   1.325      check(mapCompare(g, map1, map3), "Wrong mapCompare() or mapCopy()");
   1.326 -    check(mapCompare(g, map2, map4), "Wrong mapCompare() or mapCopy()");    
   1.327 -    
   1.328 +    check(mapCompare(g, map2, map4), "Wrong mapCompare() or mapCopy()");
   1.329 +
   1.330      Undirector<SmartDigraph> ug(g);
   1.331      Undirector<SmartDigraph>::EdgeMap<char> umap1(ug, 'x');
   1.332      Undirector<SmartDigraph>::ArcMap<double> umap2(ug, 3.14);
   1.333 -    
   1.334 +
   1.335      check(!mapCompare(g, map2, umap1), "Wrong mapCompare() or mapCopy()");
   1.336      check(!mapCompare(g, umap1, map2), "Wrong mapCompare() or mapCopy()");
   1.337      check(!mapCompare(ug, map2, umap1), "Wrong mapCompare() or mapCopy()");
   1.338      check(!mapCompare(ug, umap1, map2), "Wrong mapCompare() or mapCopy()");
   1.339 -    
   1.340 +
   1.341      mapCopy(g, map2, umap1);
   1.342  
   1.343      check(mapCompare(g, map2, umap1), "Wrong mapCompare() or mapCopy()");
   1.344      check(mapCompare(g, umap1, map2), "Wrong mapCompare() or mapCopy()");
   1.345      check(mapCompare(ug, map2, umap1), "Wrong mapCompare() or mapCopy()");
   1.346      check(mapCompare(ug, umap1, map2), "Wrong mapCompare() or mapCopy()");
   1.347 -    
   1.348 +
   1.349      mapCopy(g, map2, umap1);
   1.350      mapCopy(g, umap1, map2);
   1.351      mapCopy(ug, map2, umap1);
   1.352      mapCopy(ug, umap1, map2);
   1.353 -    
   1.354 +
   1.355      check(!mapCompare(ug, umap1, umap2), "Wrong mapCompare() or mapCopy()");
   1.356      mapCopy(ug, umap1, umap2);
   1.357      check(mapCompare(ug, umap1, umap2), "Wrong mapCompare() or mapCopy()");
   1.358 -    
   1.359 +
   1.360      check(!mapCompare(g, map1, constMap<Node>(2)), "Wrong mapCompare()");
   1.361      mapFill(g, map1, 2);
   1.362      check(mapCompare(g, constMap<Node>(2), map1), "Wrong mapFill()");
   1.363 @@ -994,6 +995,6 @@
   1.364      mapCopy(g, constMap<Arc>('z'), map2);
   1.365      check(mapCompare(g, constMap<Arc>('z'), map2), "Wrong mapCopy()");
   1.366    }
   1.367 -  
   1.368 +
   1.369    return 0;
   1.370  }