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 }