1.1 --- a/test/maps_test.cc Mon Aug 31 07:22:26 2009 +0200
1.2 +++ b/test/maps_test.cc Mon Aug 31 08:25:33 2009 +0200
1.3 @@ -22,7 +22,7 @@
1.4 #include <lemon/concept_check.h>
1.5 #include <lemon/concepts/maps.h>
1.6 #include <lemon/maps.h>
1.7 -#include <lemon/list_graph.h>
1.8 +#include <lemon/smart_graph.h>
1.9
1.10 #include "test_tools.h"
1.11
1.12 @@ -349,10 +349,10 @@
1.13 it != map2.end(); ++it )
1.14 check(v1[i++] == *it, "Something is wrong with LoggerBoolMap");
1.15 }
1.16 -
1.17 +
1.18 // CrossRefMap
1.19 {
1.20 - typedef ListDigraph Graph;
1.21 + typedef SmartDigraph Graph;
1.22 DIGRAPH_TYPEDEFS(Graph);
1.23
1.24 checkConcept<ReadWriteMap<Node, int>,
1.25 @@ -383,6 +383,193 @@
1.26 check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
1.27 it == map.endValue(), "Wrong value iterator");
1.28 }
1.29 +
1.30 + // Iterable bool map
1.31 + {
1.32 + typedef SmartGraph Graph;
1.33 + typedef SmartGraph::Node Item;
1.34
1.35 + typedef IterableBoolMap<SmartGraph, SmartGraph::Node> Ibm;
1.36 + checkConcept<ReferenceMap<Item, bool, bool&, const bool&>, Ibm>();
1.37 +
1.38 + const int num = 10;
1.39 + Graph g;
1.40 + std::vector<Item> items;
1.41 + for (int i = 0; i < num; ++i) {
1.42 + items.push_back(g.addNode());
1.43 + }
1.44 +
1.45 + Ibm map1(g, true);
1.46 + int n = 0;
1.47 + for (Ibm::TrueIt it(map1); it != INVALID; ++it) {
1.48 + check(map1[static_cast<Item>(it)], "Wrong TrueIt");
1.49 + ++n;
1.50 + }
1.51 + check(n == num, "Wrong number");
1.52 +
1.53 + n = 0;
1.54 + for (Ibm::ItemIt it(map1, true); it != INVALID; ++it) {
1.55 + check(map1[static_cast<Item>(it)], "Wrong ItemIt for true");
1.56 + ++n;
1.57 + }
1.58 + check(n == num, "Wrong number");
1.59 + check(Ibm::FalseIt(map1) == INVALID, "Wrong FalseIt");
1.60 + check(Ibm::ItemIt(map1, false) == INVALID, "Wrong ItemIt for false");
1.61 +
1.62 + map1[items[5]] = true;
1.63 +
1.64 + n = 0;
1.65 + for (Ibm::ItemIt it(map1, true); it != INVALID; ++it) {
1.66 + check(map1[static_cast<Item>(it)], "Wrong ItemIt for true");
1.67 + ++n;
1.68 + }
1.69 + check(n == num, "Wrong number");
1.70 +
1.71 + map1[items[num / 2]] = false;
1.72 + check(map1[items[num / 2]] == false, "Wrong map value");
1.73 +
1.74 + n = 0;
1.75 + for (Ibm::TrueIt it(map1); it != INVALID; ++it) {
1.76 + check(map1[static_cast<Item>(it)], "Wrong TrueIt for true");
1.77 + ++n;
1.78 + }
1.79 + check(n == num - 1, "Wrong number");
1.80 +
1.81 + n = 0;
1.82 + for (Ibm::FalseIt it(map1); it != INVALID; ++it) {
1.83 + check(!map1[static_cast<Item>(it)], "Wrong FalseIt for true");
1.84 + ++n;
1.85 + }
1.86 + check(n == 1, "Wrong number");
1.87 +
1.88 + map1[items[0]] = false;
1.89 + check(map1[items[0]] == false, "Wrong map value");
1.90 +
1.91 + map1[items[num - 1]] = false;
1.92 + check(map1[items[num - 1]] == false, "Wrong map value");
1.93 +
1.94 + n = 0;
1.95 + for (Ibm::TrueIt it(map1); it != INVALID; ++it) {
1.96 + check(map1[static_cast<Item>(it)], "Wrong TrueIt for true");
1.97 + ++n;
1.98 + }
1.99 + check(n == num - 3, "Wrong number");
1.100 + check(map1.trueNum() == num - 3, "Wrong number");
1.101 +
1.102 + n = 0;
1.103 + for (Ibm::FalseIt it(map1); it != INVALID; ++it) {
1.104 + check(!map1[static_cast<Item>(it)], "Wrong FalseIt for true");
1.105 + ++n;
1.106 + }
1.107 + check(n == 3, "Wrong number");
1.108 + check(map1.falseNum() == 3, "Wrong number");
1.109 + }
1.110 +
1.111 + // Iterable int map
1.112 + {
1.113 + typedef SmartGraph Graph;
1.114 + typedef SmartGraph::Node Item;
1.115 + typedef IterableIntMap<SmartGraph, SmartGraph::Node> Iim;
1.116 +
1.117 + checkConcept<ReferenceMap<Item, int, int&, const int&>, Iim>();
1.118 +
1.119 + const int num = 10;
1.120 + Graph g;
1.121 + std::vector<Item> items;
1.122 + for (int i = 0; i < num; ++i) {
1.123 + items.push_back(g.addNode());
1.124 + }
1.125 +
1.126 + Iim map1(g);
1.127 + check(map1.size() == 0, "Wrong size");
1.128 +
1.129 + for (int i = 0; i < num; ++i) {
1.130 + map1[items[i]] = i;
1.131 + }
1.132 + check(map1.size() == num, "Wrong size");
1.133 +
1.134 + for (int i = 0; i < num; ++i) {
1.135 + Iim::ItemIt it(map1, i);
1.136 + check(static_cast<Item>(it) == items[i], "Wrong value");
1.137 + ++it;
1.138 + check(static_cast<Item>(it) == INVALID, "Wrong value");
1.139 + }
1.140 +
1.141 + for (int i = 0; i < num; ++i) {
1.142 + map1[items[i]] = i % 2;
1.143 + }
1.144 + check(map1.size() == 2, "Wrong size");
1.145 +
1.146 + int n = 0;
1.147 + for (Iim::ItemIt it(map1, 0); it != INVALID; ++it) {
1.148 + check(map1[static_cast<Item>(it)] == 0, "Wrong value");
1.149 + ++n;
1.150 + }
1.151 + check(n == (num + 1) / 2, "Wrong number");
1.152 +
1.153 + for (Iim::ItemIt it(map1, 1); it != INVALID; ++it) {
1.154 + check(map1[static_cast<Item>(it)] == 1, "Wrong value");
1.155 + ++n;
1.156 + }
1.157 + check(n == num, "Wrong number");
1.158 +
1.159 + }
1.160 +
1.161 + // Iterable value map
1.162 + {
1.163 + typedef SmartGraph Graph;
1.164 + typedef SmartGraph::Node Item;
1.165 + typedef IterableValueMap<SmartGraph, SmartGraph::Node, double> Ivm;
1.166 +
1.167 + checkConcept<ReadWriteMap<Item, double>, Ivm>();
1.168 +
1.169 + const int num = 10;
1.170 + Graph g;
1.171 + std::vector<Item> items;
1.172 + for (int i = 0; i < num; ++i) {
1.173 + items.push_back(g.addNode());
1.174 + }
1.175 +
1.176 + Ivm map1(g, 0.0);
1.177 + check(distance(map1.beginValue(), map1.endValue()) == 1, "Wrong size");
1.178 + check(*map1.beginValue() == 0.0, "Wrong value");
1.179 +
1.180 + for (int i = 0; i < num; ++i) {
1.181 + map1.set(items[i], static_cast<double>(i));
1.182 + }
1.183 + check(distance(map1.beginValue(), map1.endValue()) == num, "Wrong size");
1.184 +
1.185 + for (int i = 0; i < num; ++i) {
1.186 + Ivm::ItemIt it(map1, static_cast<double>(i));
1.187 + check(static_cast<Item>(it) == items[i], "Wrong value");
1.188 + ++it;
1.189 + check(static_cast<Item>(it) == INVALID, "Wrong value");
1.190 + }
1.191 +
1.192 + for (Ivm::ValueIterator vit = map1.beginValue();
1.193 + vit != map1.endValue(); ++vit) {
1.194 + check(map1[static_cast<Item>(Ivm::ItemIt(map1, *vit))] == *vit,
1.195 + "Wrong ValueIterator");
1.196 + }
1.197 +
1.198 + for (int i = 0; i < num; ++i) {
1.199 + map1.set(items[i], static_cast<double>(i % 2));
1.200 + }
1.201 + check(distance(map1.beginValue(), map1.endValue()) == 2, "Wrong size");
1.202 +
1.203 + int n = 0;
1.204 + for (Ivm::ItemIt it(map1, 0.0); it != INVALID; ++it) {
1.205 + check(map1[static_cast<Item>(it)] == 0.0, "Wrong value");
1.206 + ++n;
1.207 + }
1.208 + check(n == (num + 1) / 2, "Wrong number");
1.209 +
1.210 + for (Ivm::ItemIt it(map1, 1.0); it != INVALID; ++it) {
1.211 + check(map1[static_cast<Item>(it)] == 1.0, "Wrong value");
1.212 + ++n;
1.213 + }
1.214 + check(n == num, "Wrong number");
1.215 +
1.216 + }
1.217 return 0;
1.218 }