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; |