test/maps_test.cc
changeset 767 6e8c27ee9079
parent 731 7b1a6e963018
child 768 99124ea4f048
equal deleted inserted replaced
14:4a6b01c1896b 18:2ff349d2cf21
   327   }
   327   }
   328 
   328 
   329   // LoggerBoolMap
   329   // LoggerBoolMap
   330   {
   330   {
   331     typedef std::vector<int> vec;
   331     typedef std::vector<int> vec;
       
   332     checkConcept<WriteMap<int, bool>, LoggerBoolMap<vec::iterator> >();
       
   333     checkConcept<WriteMap<int, bool>,
       
   334                  LoggerBoolMap<std::back_insert_iterator<vec> > >();
       
   335 
   332     vec v1;
   336     vec v1;
   333     vec v2(10);
   337     vec v2(10);
   334     LoggerBoolMap<std::back_insert_iterator<vec> >
   338     LoggerBoolMap<std::back_insert_iterator<vec> >
   335       map1(std::back_inserter(v1));
   339       map1(std::back_inserter(v1));
   336     LoggerBoolMap<vec::iterator> map2(v2.begin());
   340     LoggerBoolMap<vec::iterator> map2(v2.begin());
   348     for ( LoggerBoolMap<vec::iterator>::Iterator it = map2.begin();
   352     for ( LoggerBoolMap<vec::iterator>::Iterator it = map2.begin();
   349           it != map2.end(); ++it )
   353           it != map2.end(); ++it )
   350       check(v1[i++] == *it, "Something is wrong with LoggerBoolMap");
   354       check(v1[i++] == *it, "Something is wrong with LoggerBoolMap");
   351   }
   355   }
   352   
   356   
   353   // CrossRefMap
   357   // IdMap, RangeIdMap
   354   {
   358   {
   355     typedef ListDigraph Graph;
   359     typedef ListDigraph Graph;
   356     DIGRAPH_TYPEDEFS(Graph);
   360     DIGRAPH_TYPEDEFS(Graph);
   357 
   361 
       
   362     checkConcept<ReadMap<Node, int>, IdMap<Graph, Node> >();
       
   363     checkConcept<ReadMap<Arc, int>, IdMap<Graph, Arc> >();
       
   364     checkConcept<ReadMap<Node, int>, RangeIdMap<Graph, Node> >();
       
   365     checkConcept<ReadMap<Arc, int>, RangeIdMap<Graph, Arc> >();
       
   366     
       
   367     Graph gr;
       
   368     IdMap<Graph, Node> nmap(gr);
       
   369     IdMap<Graph, Arc> amap(gr);
       
   370     RangeIdMap<Graph, Node> nrmap(gr);
       
   371     RangeIdMap<Graph, Arc> armap(gr);
       
   372     
       
   373     Node n0 = gr.addNode();
       
   374     Node n1 = gr.addNode();
       
   375     Node n2 = gr.addNode();
       
   376     
       
   377     Arc a0 = gr.addArc(n0, n1);
       
   378     Arc a1 = gr.addArc(n0, n2);
       
   379     Arc a2 = gr.addArc(n2, n1);
       
   380     Arc a3 = gr.addArc(n2, n0);
       
   381     
       
   382     check(nmap[n0] == gr.id(n0) && nmap(gr.id(n0)) == n0, "Wrong IdMap");
       
   383     check(nmap[n1] == gr.id(n1) && nmap(gr.id(n1)) == n1, "Wrong IdMap");
       
   384     check(nmap[n2] == gr.id(n2) && nmap(gr.id(n2)) == n2, "Wrong IdMap");
       
   385 
       
   386     check(amap[a0] == gr.id(a0) && amap(gr.id(a0)) == a0, "Wrong IdMap");
       
   387     check(amap[a1] == gr.id(a1) && amap(gr.id(a1)) == a1, "Wrong IdMap");
       
   388     check(amap[a2] == gr.id(a2) && amap(gr.id(a2)) == a2, "Wrong IdMap");
       
   389     check(amap[a3] == gr.id(a3) && amap(gr.id(a3)) == a3, "Wrong IdMap");
       
   390 
       
   391     check(nmap.inverse()[gr.id(n0)] == n0, "Wrong IdMap::InverseMap");
       
   392     check(amap.inverse()[gr.id(a0)] == a0, "Wrong IdMap::InverseMap");
       
   393     
       
   394     check(nrmap.size() == 3 && armap.size() == 4,
       
   395           "Wrong RangeIdMap::size()");
       
   396 
       
   397     check(nrmap[n0] == 0 && nrmap(0) == n0, "Wrong RangeIdMap");
       
   398     check(nrmap[n1] == 1 && nrmap(1) == n1, "Wrong RangeIdMap");
       
   399     check(nrmap[n2] == 2 && nrmap(2) == n2, "Wrong RangeIdMap");
       
   400     
       
   401     check(armap[a0] == 0 && armap(0) == a0, "Wrong RangeIdMap");
       
   402     check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
       
   403     check(armap[a2] == 2 && armap(2) == a2, "Wrong RangeIdMap");
       
   404     check(armap[a3] == 3 && armap(3) == a3, "Wrong RangeIdMap");
       
   405 
       
   406     check(nrmap.inverse()[0] == n0, "Wrong RangeIdMap::InverseMap");
       
   407     check(armap.inverse()[0] == a0, "Wrong RangeIdMap::InverseMap");
       
   408     
       
   409     gr.erase(n1);
       
   410     
       
   411     if (nrmap[n0] == 1) nrmap.swap(n0, n2);
       
   412     nrmap.swap(n2, n0);
       
   413     if (armap[a1] == 1) armap.swap(a1, a3);
       
   414     armap.swap(a3, a1);
       
   415     
       
   416     check(nrmap.size() == 2 && armap.size() == 2,
       
   417           "Wrong RangeIdMap::size()");
       
   418 
       
   419     check(nrmap[n0] == 1 && nrmap(1) == n0, "Wrong RangeIdMap");
       
   420     check(nrmap[n2] == 0 && nrmap(0) == n2, "Wrong RangeIdMap");
       
   421     
       
   422     check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
       
   423     check(armap[a3] == 0 && armap(0) == a3, "Wrong RangeIdMap");
       
   424 
       
   425     check(nrmap.inverse()[0] == n2, "Wrong RangeIdMap::InverseMap");
       
   426     check(armap.inverse()[0] == a3, "Wrong RangeIdMap::InverseMap");
       
   427   }
       
   428   
       
   429   // CrossRefMap
       
   430   {
       
   431     typedef ListDigraph Graph;
       
   432     DIGRAPH_TYPEDEFS(Graph);
       
   433 
   358     checkConcept<ReadWriteMap<Node, int>,
   434     checkConcept<ReadWriteMap<Node, int>,
   359                  CrossRefMap<Graph, Node, int> >();
   435                  CrossRefMap<Graph, Node, int> >();
       
   436     checkConcept<ReadWriteMap<Node, bool>,
       
   437                  CrossRefMap<Graph, Node, bool> >();
       
   438     checkConcept<ReadWriteMap<Node, double>,
       
   439                  CrossRefMap<Graph, Node, double> >();
   360     
   440     
   361     Graph gr;
   441     Graph gr;
   362     typedef CrossRefMap<Graph, Node, char> CRMap;
   442     typedef CrossRefMap<Graph, Node, char> CRMap;
   363     typedef CRMap::ValueIterator ValueIt;
   443     typedef CRMap::ValueIterator ValueIt;
   364     CRMap map(gr);
   444     CRMap map(gr);
   368     Node n2 = gr.addNode();
   448     Node n2 = gr.addNode();
   369     
   449     
   370     map.set(n0, 'A');
   450     map.set(n0, 'A');
   371     map.set(n1, 'B');
   451     map.set(n1, 'B');
   372     map.set(n2, 'C');
   452     map.set(n2, 'C');
       
   453     
       
   454     check(map[n0] == 'A' && map('A') == n0 && map.inverse()['A'] == n0,
       
   455           "Wrong CrossRefMap");
       
   456     check(map[n1] == 'B' && map('B') == n1 && map.inverse()['B'] == n1,
       
   457           "Wrong CrossRefMap");
       
   458     check(map[n2] == 'C' && map('C') == n2 && map.inverse()['C'] == n2,
       
   459           "Wrong CrossRefMap");
       
   460     check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
       
   461           "Wrong CrossRefMap::count()");
       
   462     
       
   463     ValueIt it = map.beginValue();
       
   464     check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
       
   465           it == map.endValue(), "Wrong value iterator");
       
   466     
   373     map.set(n2, 'A');
   467     map.set(n2, 'A');
       
   468 
       
   469     check(map[n0] == 'A' && map[n1] == 'B' && map[n2] == 'A',
       
   470           "Wrong CrossRefMap");
       
   471     check(map('A') == n0 && map.inverse()['A'] == n0, "Wrong CrossRefMap");
       
   472     check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
       
   473     check(map('C') == INVALID && map.inverse()['C'] == INVALID,
       
   474           "Wrong CrossRefMap");
       
   475     check(map.count('A') == 2 && map.count('B') == 1 && map.count('C') == 0,
       
   476           "Wrong CrossRefMap::count()");
       
   477 
       
   478     it = map.beginValue();
       
   479     check(*it++ == 'A' && *it++ == 'A' && *it++ == 'B' &&
       
   480           it == map.endValue(), "Wrong value iterator");
       
   481 
   374     map.set(n0, 'C');
   482     map.set(n0, 'C');
   375 
   483 
   376     check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A',
   484     check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A',
   377           "Wrong CrossRefMap");
   485           "Wrong CrossRefMap");
   378     check(map('A') == n2 && map.inverse()['A'] == n2, "Wrong CrossRefMap");
   486     check(map('A') == n2 && map.inverse()['A'] == n2, "Wrong CrossRefMap");
   379     check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
   487     check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
   380     check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap");
   488     check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap");
   381 
   489     check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
   382     ValueIt it = map.beginValue();
   490           "Wrong CrossRefMap::count()");
       
   491 
       
   492     it = map.beginValue();
   383     check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
   493     check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
   384           it == map.endValue(), "Wrong value iterator");
   494           it == map.endValue(), "Wrong value iterator");
   385   }
   495   }
   386 
   496 
   387   return 0;
   497   return 0;