Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: packages/quiver/test/collection/bimap_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 Google Inc. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 library quiver.collection.bimap_test;
16
17 import 'package:quiver/collection.dart';
18 import 'package:test/test.dart';
19
20 main() {
21 group('BiMap', () {
22 test('should construct a HashBiMap', () {
23 expect(new BiMap() is HashBiMap, true);
24 });
25 });
26
27 group('HashBiMap', () {
28 BiMap<String, int> map;
29 String k1 = 'k1',
30 k2 = 'k2',
31 k3 = 'k3';
32 int v1 = 1,
33 v2 = 2,
34 v3 = 3;
35
36 setUp(() {
37 map = new HashBiMap();
38 });
39
40 test('should initialize empty', () {
41 expect(map.isEmpty, true);
42 expect(map.isNotEmpty, false);
43 expect(map.inverse.isEmpty, true);
44 expect(map.inverse.isNotEmpty, false);
45 });
46
47 test('should throw when adding a null key or value', () {
48 expect(() => map[null] = v1, throwsA(new isInstanceOf<ArgumentError>()));
49 expect(() => map[k1] = null, throwsA(new isInstanceOf<ArgumentError>()));
50 });
51
52 test('should throw when adding a null key or value via its inverse', () {
53 expect(() => map.inverse[null] = k1,
54 throwsA(new isInstanceOf<ArgumentError>()));
55 expect(() => map.inverse[v1] = null,
56 throwsA(new isInstanceOf<ArgumentError>()));
57 });
58
59 test('should not be empty after adding a mapping', () {
60 map[k1] = v1;
61 expect(map.isEmpty, false);
62 expect(map.isNotEmpty, true);
63 expect(map.inverse.isEmpty, false);
64 expect(map.inverse.isNotEmpty, true);
65 });
66
67 test('should not be empty after adding a mapping via its inverse', () {
68 map.inverse[v1] = k1;
69 expect(map.isEmpty, false);
70 expect(map.isNotEmpty, true);
71 expect(map.inverse.isEmpty, false);
72 expect(map.inverse.isNotEmpty, true);
73 });
74
75 test('should contain added mappings', () {
76 map[k1] = v1;
77 map[k2] = v2;
78 expect(map[k1], v1);
79 expect(map[k2], v2);
80 expect(map.inverse[v1], k1);
81 expect(map.inverse[v2], k2);
82 });
83
84 test('should contain mappings added via its invese', () {
85 map.inverse[v1] = k1;
86 map.inverse[v2] = k2;
87 expect(map[k1], v1);
88 expect(map[k2], v2);
89 expect(map.inverse[v1], k1);
90 expect(map.inverse[v2], k2);
91 });
92
93 test('should allow overwriting existing keys', () {
94 map[k1] = v1;
95 map[k1] = v2;
96 expect(map[k1], v2);
97 expect(map.inverse.containsKey(v1), false);
98 expect(map.inverse[v2], k1);
99 });
100
101 test('should allow overwriting existing keys via its inverse', () {
102 map.inverse[v1] = k1;
103 map.inverse[v1] = k2;
104 expect(map[k2], v1);
105 expect(map.inverse.containsKey(v2), false);
106 expect(map.inverse[v1], k2);
107 });
108
109 test('should allow overwriting existing key-value pairs', () {
110 map[k1] = v1;
111 map[k1] = v1;
112 expect(map[k1], v1);
113 expect(map.inverse.containsKey(v1), true);
114 expect(map.inverse[v1], k1);
115 });
116
117 test('should allow overwriting existing key-value pairs via its inverse',
118 () {
119 map.inverse[v1] = k1;
120 map.inverse[v1] = k1;
121 expect(map[k1], v1);
122 expect(map.inverse.containsKey(v1), true);
123 expect(map.inverse[v1], k1);
124 });
125
126 test('should throw on overwriting unmapped keys with a mapped value', () {
127 map[k1] = v1;
128 expect(() => map[k2] = v1, throwsA(new isInstanceOf<ArgumentError>()));
129 expect(map.containsKey(k2), false);
130 expect(map.inverse.containsValue(k2), false);
131 });
132
133 test(
134 'should throw on overwriting unmapped keys with a mapped value via inver se',
135 () {
136 map[k1] = v1;
137 expect(() => map.inverse[v2] = k1,
138 throwsA(new isInstanceOf<ArgumentError>()));
139 expect(map.containsValue(v2), false);
140 expect(map.inverse.containsKey(v2), false);
141 });
142
143 test('should allow force-adding unmapped keys with a mapped value', () {
144 map[k1] = v1;
145 map.replace(k2, v1);
146 expect(map[k2], v1);
147 expect(map.containsKey(k1), false);
148 expect(map.inverse[v1], k2);
149 expect(map.inverse.containsValue(k1), false);
150 });
151
152 test(
153 'should allow force-adding unmapped keys with a mapped value via inverse ',
154 () {
155 map.inverse[v1] = k1;
156 map.inverse.replace(v2, k1);
157 expect(map[k1], v2);
158 expect(map.containsValue(v1), false);
159 expect(map.inverse[v2], k1);
160 expect(map.inverse.containsKey(v1), false);
161 });
162
163 test('should not contain removed mappings', () {
164 map[k1] = v1;
165 map.remove(k1);
166 expect(map.containsKey(k1), false);
167 expect(map.inverse.containsKey(v1), false);
168 });
169
170 test('should not contain mappings removed from its inverse', () {
171 map[k1] = v1;
172 map.inverse.remove(v1);
173 expect(map.containsKey(k1), false);
174 expect(map.inverse.containsKey(v1), false);
175 });
176
177 test('should be empty after clear', () {
178 map[k1] = v1;
179 map[k2] = v2;
180 map.clear();
181 expect(map.isEmpty, true);
182 expect(map.inverse.isEmpty, true);
183 });
184
185 test('should be empty after inverse.clear', () {
186 map[k1] = v1;
187 map[k2] = v2;
188 map.inverse.clear();
189 expect(map.isEmpty, true);
190 expect(map.inverse.isEmpty, true);
191 });
192
193 test('should contain mapped keys', () {
194 map[k1] = v1;
195 map[k2] = v2;
196 expect(map.containsKey(k1), true);
197 expect(map.containsKey(k2), true);
198 expect(map.keys, unorderedEquals([k1, k2]));
199 expect(map.inverse.containsKey(v1), true);
200 expect(map.inverse.containsKey(v2), true);
201 expect(map.inverse.keys, unorderedEquals([v1, v2]));
202 });
203
204 test('should contain keys mapped via its inverse', () {
205 map.inverse[v1] = k1;
206 map.inverse[v2] = k2;
207 expect(map.containsKey(k1), true);
208 expect(map.containsKey(k2), true);
209 expect(map.keys, unorderedEquals([k1, k2]));
210 expect(map.inverse.containsKey(v1), true);
211 expect(map.inverse.containsKey(v2), true);
212 expect(map.inverse.keys, unorderedEquals([v1, v2]));
213 });
214
215 test('should contain mapped values', () {
216 map[k1] = v1;
217 map[k2] = v2;
218 expect(map.containsValue(v1), true);
219 expect(map.containsValue(v2), true);
220 expect(map.values, unorderedEquals([v1, v2]));
221 expect(map.inverse.containsValue(k1), true);
222 expect(map.inverse.containsValue(k2), true);
223 expect(map.inverse.values, unorderedEquals([k1, k2]));
224 });
225
226 test('should contain values mapped via its inverse', () {
227 map.inverse[v1] = k1;
228 map.inverse[v2] = k2;
229 expect(map.containsValue(v1), true);
230 expect(map.containsValue(v2), true);
231 expect(map.values, unorderedEquals([v1, v2]));
232 expect(map.inverse.containsValue(k1), true);
233 expect(map.inverse.containsValue(k2), true);
234 expect(map.inverse.values, unorderedEquals([k1, k2]));
235 });
236
237 test('should add mappings via putIfAbsent if absent', () {
238 map.putIfAbsent(k1, () => v1);
239 expect(map[k1], v1);
240 expect(map.inverse[v1], k1);
241 });
242
243 test('should add mappings via inverse.putIfAbsent if absent', () {
244 map.inverse.putIfAbsent(v1, () => k1);
245 expect(map[k1], v1);
246 expect(map.inverse[v1], k1);
247 });
248
249 test('should not add mappings via putIfAbsent if present', () {
250 map[k1] = v1;
251 map.putIfAbsent(k1, () => v2);
252 expect(map[k1], v1);
253 expect(map.inverse[v1], k1);
254 expect(map.inverse.containsKey(v2), false);
255 });
256
257 test('should not add mappings via inverse.putIfAbsent if present', () {
258 map[k1] = v1;
259 map.inverse.putIfAbsent(v1, () => k2);
260 expect(map[k1], v1);
261 expect(map.containsKey(k2), false);
262 expect(map.inverse[v1], k1);
263 });
264
265 test('should contain mappings added from another map', () {
266 map.addAll({k1: v1, k2: v2, k3: v3});
267 expect(map[k1], v1);
268 expect(map[k2], v2);
269 expect(map[k3], v3);
270 expect(map.inverse[v1], k1);
271 expect(map.inverse[v2], k2);
272 expect(map.inverse[v3], k3);
273 });
274
275 test('should contain mappings added via its inverse from another map', () {
276 map.inverse.addAll({v1: k1, v2: k2, v3: k3});
277 expect(map[k1], v1);
278 expect(map[k2], v2);
279 expect(map[k3], v3);
280 expect(map.inverse[v1], k1);
281 expect(map.inverse[v2], k2);
282 expect(map.inverse[v3], k3);
283 });
284
285 test('should throw on adding from another map with duplicate values', () {
286 expect(() => map.addAll({k1: v1, k2: v2, k3: v2}),
287 throwsA(new isInstanceOf<ArgumentError>()));
288 });
289
290 test(
291 'should throw on adding from another map with duplicate values via inver se',
292 () {
293 expect(() => map.inverse.addAll({v1: k1, v2: k2, v3: k2}),
294 throwsA(new isInstanceOf<ArgumentError>()));
295 });
296
297 test('should return the number of key-value pairs as its length', () {
298 expect(map.length, 0);
299 map[k1] = v1;
300 expect(map.length, 1);
301 map[k1] = v2;
302 expect(map.length, 1);
303 map.replace(k2, v2);
304 expect(map.length, 1);
305 map[k1] = v1;
306 expect(map.length, 2);
307 });
308
309 test('should iterate over all pairs via forEach', () {
310 map[k1] = v1;
311 map[k2] = v2;
312 var keys = [];
313 var values = [];
314 map.forEach((k, v) {
315 keys.add(k);
316 values.add(v);
317 });
318 expect(keys, unorderedEquals([k1, k2]));
319 expect(values, unorderedEquals([v1, v2]));
320 });
321
322 test('should iterate over all pairs via forEach of its inverse', () {
323 map[k1] = v1;
324 map[k2] = v2;
325 var keys = [];
326 var values = [];
327 map.inverse.forEach((k, v) {
328 keys.add(k);
329 values.add(v);
330 });
331 expect(keys, unorderedEquals([v1, v2]));
332 expect(values, unorderedEquals([k1, k2]));
333 });
334 });
335 }
OLDNEW
« no previous file with comments | « packages/quiver/test/collection/all_tests.dart ('k') | packages/quiver/test/collection/collection_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698