test/maps_test.cc
changeset 767 6e8c27ee9079
parent 731 7b1a6e963018
child 768 99124ea4f048
     1.1 --- a/test/maps_test.cc	Thu Jul 23 18:09:41 2009 +0200
     1.2 +++ b/test/maps_test.cc	Thu Jul 23 18:13:59 2009 +0200
     1.3 @@ -329,6 +329,10 @@
     1.4    // LoggerBoolMap
     1.5    {
     1.6      typedef std::vector<int> vec;
     1.7 +    checkConcept<WriteMap<int, bool>, LoggerBoolMap<vec::iterator> >();
     1.8 +    checkConcept<WriteMap<int, bool>,
     1.9 +                 LoggerBoolMap<std::back_insert_iterator<vec> > >();
    1.10 +
    1.11      vec v1;
    1.12      vec v2(10);
    1.13      LoggerBoolMap<std::back_insert_iterator<vec> >
    1.14 @@ -350,6 +354,78 @@
    1.15        check(v1[i++] == *it, "Something is wrong with LoggerBoolMap");
    1.16    }
    1.17    
    1.18 +  // IdMap, RangeIdMap
    1.19 +  {
    1.20 +    typedef ListDigraph Graph;
    1.21 +    DIGRAPH_TYPEDEFS(Graph);
    1.22 +
    1.23 +    checkConcept<ReadMap<Node, int>, IdMap<Graph, Node> >();
    1.24 +    checkConcept<ReadMap<Arc, int>, IdMap<Graph, Arc> >();
    1.25 +    checkConcept<ReadMap<Node, int>, RangeIdMap<Graph, Node> >();
    1.26 +    checkConcept<ReadMap<Arc, int>, RangeIdMap<Graph, Arc> >();
    1.27 +    
    1.28 +    Graph gr;
    1.29 +    IdMap<Graph, Node> nmap(gr);
    1.30 +    IdMap<Graph, Arc> amap(gr);
    1.31 +    RangeIdMap<Graph, Node> nrmap(gr);
    1.32 +    RangeIdMap<Graph, Arc> armap(gr);
    1.33 +    
    1.34 +    Node n0 = gr.addNode();
    1.35 +    Node n1 = gr.addNode();
    1.36 +    Node n2 = gr.addNode();
    1.37 +    
    1.38 +    Arc a0 = gr.addArc(n0, n1);
    1.39 +    Arc a1 = gr.addArc(n0, n2);
    1.40 +    Arc a2 = gr.addArc(n2, n1);
    1.41 +    Arc a3 = gr.addArc(n2, n0);
    1.42 +    
    1.43 +    check(nmap[n0] == gr.id(n0) && nmap(gr.id(n0)) == n0, "Wrong IdMap");
    1.44 +    check(nmap[n1] == gr.id(n1) && nmap(gr.id(n1)) == n1, "Wrong IdMap");
    1.45 +    check(nmap[n2] == gr.id(n2) && nmap(gr.id(n2)) == n2, "Wrong IdMap");
    1.46 +
    1.47 +    check(amap[a0] == gr.id(a0) && amap(gr.id(a0)) == a0, "Wrong IdMap");
    1.48 +    check(amap[a1] == gr.id(a1) && amap(gr.id(a1)) == a1, "Wrong IdMap");
    1.49 +    check(amap[a2] == gr.id(a2) && amap(gr.id(a2)) == a2, "Wrong IdMap");
    1.50 +    check(amap[a3] == gr.id(a3) && amap(gr.id(a3)) == a3, "Wrong IdMap");
    1.51 +
    1.52 +    check(nmap.inverse()[gr.id(n0)] == n0, "Wrong IdMap::InverseMap");
    1.53 +    check(amap.inverse()[gr.id(a0)] == a0, "Wrong IdMap::InverseMap");
    1.54 +    
    1.55 +    check(nrmap.size() == 3 && armap.size() == 4,
    1.56 +          "Wrong RangeIdMap::size()");
    1.57 +
    1.58 +    check(nrmap[n0] == 0 && nrmap(0) == n0, "Wrong RangeIdMap");
    1.59 +    check(nrmap[n1] == 1 && nrmap(1) == n1, "Wrong RangeIdMap");
    1.60 +    check(nrmap[n2] == 2 && nrmap(2) == n2, "Wrong RangeIdMap");
    1.61 +    
    1.62 +    check(armap[a0] == 0 && armap(0) == a0, "Wrong RangeIdMap");
    1.63 +    check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
    1.64 +    check(armap[a2] == 2 && armap(2) == a2, "Wrong RangeIdMap");
    1.65 +    check(armap[a3] == 3 && armap(3) == a3, "Wrong RangeIdMap");
    1.66 +
    1.67 +    check(nrmap.inverse()[0] == n0, "Wrong RangeIdMap::InverseMap");
    1.68 +    check(armap.inverse()[0] == a0, "Wrong RangeIdMap::InverseMap");
    1.69 +    
    1.70 +    gr.erase(n1);
    1.71 +    
    1.72 +    if (nrmap[n0] == 1) nrmap.swap(n0, n2);
    1.73 +    nrmap.swap(n2, n0);
    1.74 +    if (armap[a1] == 1) armap.swap(a1, a3);
    1.75 +    armap.swap(a3, a1);
    1.76 +    
    1.77 +    check(nrmap.size() == 2 && armap.size() == 2,
    1.78 +          "Wrong RangeIdMap::size()");
    1.79 +
    1.80 +    check(nrmap[n0] == 1 && nrmap(1) == n0, "Wrong RangeIdMap");
    1.81 +    check(nrmap[n2] == 0 && nrmap(0) == n2, "Wrong RangeIdMap");
    1.82 +    
    1.83 +    check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
    1.84 +    check(armap[a3] == 0 && armap(0) == a3, "Wrong RangeIdMap");
    1.85 +
    1.86 +    check(nrmap.inverse()[0] == n2, "Wrong RangeIdMap::InverseMap");
    1.87 +    check(armap.inverse()[0] == a3, "Wrong RangeIdMap::InverseMap");
    1.88 +  }
    1.89 +  
    1.90    // CrossRefMap
    1.91    {
    1.92      typedef ListDigraph Graph;
    1.93 @@ -357,6 +433,10 @@
    1.94  
    1.95      checkConcept<ReadWriteMap<Node, int>,
    1.96                   CrossRefMap<Graph, Node, int> >();
    1.97 +    checkConcept<ReadWriteMap<Node, bool>,
    1.98 +                 CrossRefMap<Graph, Node, bool> >();
    1.99 +    checkConcept<ReadWriteMap<Node, double>,
   1.100 +                 CrossRefMap<Graph, Node, double> >();
   1.101      
   1.102      Graph gr;
   1.103      typedef CrossRefMap<Graph, Node, char> CRMap;
   1.104 @@ -370,7 +450,35 @@
   1.105      map.set(n0, 'A');
   1.106      map.set(n1, 'B');
   1.107      map.set(n2, 'C');
   1.108 +    
   1.109 +    check(map[n0] == 'A' && map('A') == n0 && map.inverse()['A'] == n0,
   1.110 +          "Wrong CrossRefMap");
   1.111 +    check(map[n1] == 'B' && map('B') == n1 && map.inverse()['B'] == n1,
   1.112 +          "Wrong CrossRefMap");
   1.113 +    check(map[n2] == 'C' && map('C') == n2 && map.inverse()['C'] == n2,
   1.114 +          "Wrong CrossRefMap");
   1.115 +    check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
   1.116 +          "Wrong CrossRefMap::count()");
   1.117 +    
   1.118 +    ValueIt it = map.beginValue();
   1.119 +    check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
   1.120 +          it == map.endValue(), "Wrong value iterator");
   1.121 +    
   1.122      map.set(n2, 'A');
   1.123 +
   1.124 +    check(map[n0] == 'A' && map[n1] == 'B' && map[n2] == 'A',
   1.125 +          "Wrong CrossRefMap");
   1.126 +    check(map('A') == n0 && map.inverse()['A'] == n0, "Wrong CrossRefMap");
   1.127 +    check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
   1.128 +    check(map('C') == INVALID && map.inverse()['C'] == INVALID,
   1.129 +          "Wrong CrossRefMap");
   1.130 +    check(map.count('A') == 2 && map.count('B') == 1 && map.count('C') == 0,
   1.131 +          "Wrong CrossRefMap::count()");
   1.132 +
   1.133 +    it = map.beginValue();
   1.134 +    check(*it++ == 'A' && *it++ == 'A' && *it++ == 'B' &&
   1.135 +          it == map.endValue(), "Wrong value iterator");
   1.136 +
   1.137      map.set(n0, 'C');
   1.138  
   1.139      check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A',
   1.140 @@ -378,8 +486,10 @@
   1.141      check(map('A') == n2 && map.inverse()['A'] == n2, "Wrong CrossRefMap");
   1.142      check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
   1.143      check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap");
   1.144 +    check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
   1.145 +          "Wrong CrossRefMap::count()");
   1.146  
   1.147 -    ValueIt it = map.beginValue();
   1.148 +    it = map.beginValue();
   1.149      check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
   1.150            it == map.endValue(), "Wrong value iterator");
   1.151    }