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