798       ++n;  | 
   815       ++n;  | 
   799     }  | 
   816     }  | 
   800     check(n == num, "Wrong number");  | 
   817     check(n == num, "Wrong number");  | 
   801   | 
   818   | 
   802   }  | 
   819   }  | 
         | 
   820     | 
         | 
   821   // Graph map utilities:  | 
         | 
   822   // mapMin(), mapMax(), mapMinValue(), mapMaxValue()  | 
         | 
   823   // mapFind(), mapFindIf(), mapCount(), mapCountIf()  | 
         | 
   824   // mapCopy(), mapCompare(), mapFill()  | 
         | 
   825   { | 
         | 
   826     DIGRAPH_TYPEDEFS(SmartDigraph);  | 
         | 
   827   | 
         | 
   828     SmartDigraph g;  | 
         | 
   829     Node n1 = g.addNode();  | 
         | 
   830     Node n2 = g.addNode();  | 
         | 
   831     Node n3 = g.addNode();  | 
         | 
   832       | 
         | 
   833     SmartDigraph::NodeMap<int> map1(g);  | 
         | 
   834     SmartDigraph::ArcMap<char> map2(g);  | 
         | 
   835     ConstMap<Node, A> cmap1 = A();  | 
         | 
   836     ConstMap<Arc, C> cmap2 = C(0);  | 
         | 
   837       | 
         | 
   838     map1[n1] = 10;  | 
         | 
   839     map1[n2] = 5;  | 
         | 
   840     map1[n3] = 12;  | 
         | 
   841       | 
         | 
   842     // mapMin(), mapMax(), mapMinValue(), mapMaxValue()  | 
         | 
   843     check(mapMin(g, map1) == n2, "Wrong mapMin()");  | 
         | 
   844     check(mapMax(g, map1) == n3, "Wrong mapMax()");  | 
         | 
   845     check(mapMin(g, map1, std::greater<int>()) == n3, "Wrong mapMin()");  | 
         | 
   846     check(mapMax(g, map1, std::greater<int>()) == n2, "Wrong mapMax()");  | 
         | 
   847     check(mapMinValue(g, map1) == 5, "Wrong mapMinValue()");  | 
         | 
   848     check(mapMaxValue(g, map1) == 12, "Wrong mapMaxValue()");  | 
         | 
   849   | 
         | 
   850     check(mapMin(g, map2) == INVALID, "Wrong mapMin()");  | 
         | 
   851     check(mapMax(g, map2) == INVALID, "Wrong mapMax()");  | 
         | 
   852   | 
         | 
   853     check(mapMin(g, cmap1) != INVALID, "Wrong mapMin()");  | 
         | 
   854     check(mapMax(g, cmap2) == INVALID, "Wrong mapMax()");  | 
         | 
   855   | 
         | 
   856     Arc a1 = g.addArc(n1, n2);  | 
         | 
   857     Arc a2 = g.addArc(n1, n3);  | 
         | 
   858     Arc a3 = g.addArc(n2, n3);  | 
         | 
   859     Arc a4 = g.addArc(n3, n1);  | 
         | 
   860       | 
         | 
   861     map2[a1] = 'b';  | 
         | 
   862     map2[a2] = 'a';  | 
         | 
   863     map2[a3] = 'b';  | 
         | 
   864     map2[a4] = 'c';  | 
         | 
   865   | 
         | 
   866     // mapMin(), mapMax(), mapMinValue(), mapMaxValue()  | 
         | 
   867     check(mapMin(g, map2) == a2, "Wrong mapMin()");  | 
         | 
   868     check(mapMax(g, map2) == a4, "Wrong mapMax()");  | 
         | 
   869     check(mapMin(g, map2, std::greater<int>()) == a4, "Wrong mapMin()");  | 
         | 
   870     check(mapMax(g, map2, std::greater<int>()) == a2, "Wrong mapMax()");  | 
         | 
   871     check(mapMinValue(g, map2, std::greater<int>()) == 'c',  | 
         | 
   872           "Wrong mapMinValue()");  | 
         | 
   873     check(mapMaxValue(g, map2, std::greater<int>()) == 'a',  | 
         | 
   874           "Wrong mapMaxValue()");  | 
         | 
   875   | 
         | 
   876     check(mapMin(g, cmap1) != INVALID, "Wrong mapMin()");  | 
         | 
   877     check(mapMax(g, cmap2) != INVALID, "Wrong mapMax()");  | 
         | 
   878     check(mapMaxValue(g, cmap2) == C(0), "Wrong mapMaxValue()");  | 
         | 
   879   | 
         | 
   880     check(mapMin(g, composeMap(functorToMap(&createC), map2)) == a2,  | 
         | 
   881           "Wrong mapMin()");  | 
         | 
   882     check(mapMax(g, composeMap(functorToMap(&createC), map2)) == a4,  | 
         | 
   883           "Wrong mapMax()");  | 
         | 
   884     check(mapMinValue(g, composeMap(functorToMap(&createC), map2)) == C('a'), | 
         | 
   885           "Wrong mapMinValue()");  | 
         | 
   886     check(mapMaxValue(g, composeMap(functorToMap(&createC), map2)) == C('c'), | 
         | 
   887           "Wrong mapMaxValue()");  | 
         | 
   888   | 
         | 
   889     // mapFind(), mapFindIf()  | 
         | 
   890     check(mapFind(g, map1, 5) == n2, "Wrong mapFind()");  | 
         | 
   891     check(mapFind(g, map1, 6) == INVALID, "Wrong mapFind()");  | 
         | 
   892     check(mapFind(g, map2, 'a') == a2, "Wrong mapFind()");  | 
         | 
   893     check(mapFind(g, map2, 'e') == INVALID, "Wrong mapFind()");  | 
         | 
   894     check(mapFind(g, cmap2, C(0)) == ArcIt(g), "Wrong mapFind()");  | 
         | 
   895     check(mapFind(g, cmap2, C(1)) == INVALID, "Wrong mapFind()");  | 
         | 
   896   | 
         | 
   897     check(mapFindIf(g, map1, Less<int>(7)) == n2,  | 
         | 
   898           "Wrong mapFindIf()");  | 
         | 
   899     check(mapFindIf(g, map1, Less<int>(5)) == INVALID,  | 
         | 
   900           "Wrong mapFindIf()");  | 
         | 
   901     check(mapFindIf(g, map2, Less<char>('d')) == ArcIt(g), | 
         | 
   902           "Wrong mapFindIf()");  | 
         | 
   903     check(mapFindIf(g, map2, Less<char>('a')) == INVALID, | 
         | 
   904           "Wrong mapFindIf()");  | 
         | 
   905   | 
         | 
   906     // mapCount(), mapCountIf()  | 
         | 
   907     check(mapCount(g, map1, 5) == 1, "Wrong mapCount()");  | 
         | 
   908     check(mapCount(g, map1, 6) == 0, "Wrong mapCount()");  | 
         | 
   909     check(mapCount(g, map2, 'a') == 1, "Wrong mapCount()");  | 
         | 
   910     check(mapCount(g, map2, 'b') == 2, "Wrong mapCount()");  | 
         | 
   911     check(mapCount(g, map2, 'e') == 0, "Wrong mapCount()");  | 
         | 
   912     check(mapCount(g, cmap2, C(0)) == 4, "Wrong mapCount()");  | 
         | 
   913     check(mapCount(g, cmap2, C(1)) == 0, "Wrong mapCount()");  | 
         | 
   914   | 
         | 
   915     check(mapCountIf(g, map1, Less<int>(11)) == 2,  | 
         | 
   916           "Wrong mapCountIf()");  | 
         | 
   917     check(mapCountIf(g, map1, Less<int>(13)) == 3,  | 
         | 
   918           "Wrong mapCountIf()");  | 
         | 
   919     check(mapCountIf(g, map1, Less<int>(5)) == 0,  | 
         | 
   920           "Wrong mapCountIf()");  | 
         | 
   921     check(mapCountIf(g, map2, Less<char>('d')) == 4, | 
         | 
   922           "Wrong mapCountIf()");  | 
         | 
   923     check(mapCountIf(g, map2, Less<char>('c')) == 3, | 
         | 
   924           "Wrong mapCountIf()");  | 
         | 
   925     check(mapCountIf(g, map2, Less<char>('a')) == 0, | 
         | 
   926           "Wrong mapCountIf()");  | 
         | 
   927        | 
         | 
   928     // MapIt, ConstMapIt  | 
         | 
   929 /*  | 
         | 
   930 These tests can be used after applying bugfix #330  | 
         | 
   931     typedef SmartDigraph::NodeMap<int>::MapIt MapIt;  | 
         | 
   932     typedef SmartDigraph::NodeMap<int>::ConstMapIt ConstMapIt;  | 
         | 
   933     check(*std::min_element(MapIt(map1), MapIt(INVALID)) == 5,  | 
         | 
   934           "Wrong NodeMap<>::MapIt");  | 
         | 
   935     check(*std::max_element(ConstMapIt(map1), ConstMapIt(INVALID)) == 12,  | 
         | 
   936           "Wrong NodeMap<>::MapIt");  | 
         | 
   937       | 
         | 
   938     int sum = 0;  | 
         | 
   939     std::for_each(MapIt(map1), MapIt(INVALID), Sum<int>(sum));  | 
         | 
   940     check(sum == 27, "Wrong NodeMap<>::MapIt");  | 
         | 
   941     std::for_each(ConstMapIt(map1), ConstMapIt(INVALID), Sum<int>(sum));  | 
         | 
   942     check(sum == 54, "Wrong NodeMap<>::ConstMapIt");  | 
         | 
   943 */  | 
         | 
   944   | 
         | 
   945     // mapCopy(), mapCompare(), mapFill()  | 
         | 
   946     check(mapCompare(g, map1, map1), "Wrong mapCompare()");  | 
         | 
   947     check(mapCompare(g, cmap2, cmap2), "Wrong mapCompare()");  | 
         | 
   948     check(mapCompare(g, map1, shiftMap(map1, 0)), "Wrong mapCompare()");  | 
         | 
   949     check(mapCompare(g, map2, scaleMap(map2, 1)), "Wrong mapCompare()");  | 
         | 
   950     check(!mapCompare(g, map1, shiftMap(map1, 1)), "Wrong mapCompare()");  | 
         | 
   951   | 
         | 
   952     SmartDigraph::NodeMap<int> map3(g, 0);  | 
         | 
   953     SmartDigraph::ArcMap<char> map4(g, 'a');  | 
         | 
   954       | 
         | 
   955     check(!mapCompare(g, map1, map3), "Wrong mapCompare()");  | 
         | 
   956     check(!mapCompare(g, map2, map4), "Wrong mapCompare()");      | 
         | 
   957       | 
         | 
   958     mapCopy(g, map1, map3);  | 
         | 
   959     mapCopy(g, map2, map4);  | 
         | 
   960   | 
         | 
   961     check(mapCompare(g, map1, map3), "Wrong mapCompare() or mapCopy()");  | 
         | 
   962     check(mapCompare(g, map2, map4), "Wrong mapCompare() or mapCopy()");      | 
         | 
   963       | 
         | 
   964     Undirector<SmartDigraph> ug(g);  | 
         | 
   965     Undirector<SmartDigraph>::EdgeMap<char> umap1(ug, 'x');  | 
         | 
   966     Undirector<SmartDigraph>::ArcMap<double> umap2(ug, 3.14);  | 
         | 
   967       | 
         | 
   968     check(!mapCompare(g, map2, umap1), "Wrong mapCompare() or mapCopy()");  | 
         | 
   969     check(!mapCompare(g, umap1, map2), "Wrong mapCompare() or mapCopy()");  | 
         | 
   970     check(!mapCompare(ug, map2, umap1), "Wrong mapCompare() or mapCopy()");  | 
         | 
   971     check(!mapCompare(ug, umap1, map2), "Wrong mapCompare() or mapCopy()");  | 
         | 
   972       | 
         | 
   973     mapCopy(g, map2, umap1);  | 
         | 
   974   | 
         | 
   975     check(mapCompare(g, map2, umap1), "Wrong mapCompare() or mapCopy()");  | 
         | 
   976     check(mapCompare(g, umap1, map2), "Wrong mapCompare() or mapCopy()");  | 
         | 
   977     check(mapCompare(ug, map2, umap1), "Wrong mapCompare() or mapCopy()");  | 
         | 
   978     check(mapCompare(ug, umap1, map2), "Wrong mapCompare() or mapCopy()");  | 
         | 
   979       | 
         | 
   980     mapCopy(g, map2, umap1);  | 
         | 
   981     mapCopy(g, umap1, map2);  | 
         | 
   982     mapCopy(ug, map2, umap1);  | 
         | 
   983     mapCopy(ug, umap1, map2);  | 
         | 
   984       | 
         | 
   985     check(!mapCompare(ug, umap1, umap2), "Wrong mapCompare() or mapCopy()");  | 
         | 
   986     mapCopy(ug, umap1, umap2);  | 
         | 
   987     check(mapCompare(ug, umap1, umap2), "Wrong mapCompare() or mapCopy()");  | 
         | 
   988       | 
         | 
   989     check(!mapCompare(g, map1, constMap<Node>(2)), "Wrong mapCompare()");  | 
         | 
   990     mapFill(g, map1, 2);  | 
         | 
   991     check(mapCompare(g, constMap<Node>(2), map1), "Wrong mapFill()");  | 
         | 
   992   | 
         | 
   993     check(!mapCompare(g, map2, constMap<Arc>('z')), "Wrong mapCompare()"); | 
         | 
   994     mapCopy(g, constMap<Arc>('z'), map2); | 
         | 
   995     check(mapCompare(g, constMap<Arc>('z'), map2), "Wrong mapCopy()"); | 
         | 
   996   }  | 
         | 
   997     | 
   803   return 0;  | 
   998   return 0;  | 
   804 }  | 
   999 }  |