ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubMapTest.java
Revision: 1.1
Committed: Thu Mar 31 15:24:29 2005 UTC (19 years, 1 month ago) by dl
Branch: MAIN
Log Message:
Add SubMap/Set tests for TreeMap/Set

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/licenses/publicdomain
5 */
6
7 import junit.framework.*;
8 import java.util.*;
9 import java.util.concurrent.*;
10 import java.io.*;
11
12 public class TreeSubMapTest extends JSR166TestCase {
13 public static void main(String[] args) {
14 junit.textui.TestRunner.run (suite());
15 }
16 public static Test suite() {
17 return new TestSuite(TreeSubMapTest.class);
18 }
19
20 /**
21 * Create a map from Integers 1-5 to Strings "A"-"E".
22 */
23 private static NavigableMap map5() {
24 TreeMap map = new TreeMap();
25 assertTrue(map.isEmpty());
26 map.put(zero, "Z");
27 map.put(one, "A");
28 map.put(five, "E");
29 map.put(three, "C");
30 map.put(two, "B");
31 map.put(four, "D");
32 map.put(seven, "F");
33 assertFalse(map.isEmpty());
34 assertEquals(7, map.size());
35 return map.navigableSubMap(one, seven);
36 }
37
38 private static NavigableMap map0() {
39 TreeMap map = new TreeMap();
40 assertTrue(map.isEmpty());
41 return map.navigableTailMap(one);
42 }
43
44 /**
45 * clear removes all pairs
46 */
47 public void testClear() {
48 NavigableMap map = map5();
49 map.clear();
50 assertEquals(map.size(), 0);
51 }
52
53
54 /**
55 * Maps with same contents are equal
56 */
57 public void testEquals() {
58 NavigableMap map1 = map5();
59 NavigableMap map2 = map5();
60 assertEquals(map1, map2);
61 assertEquals(map2, map1);
62 map1.clear();
63 assertFalse(map1.equals(map2));
64 assertFalse(map2.equals(map1));
65 }
66
67 /**
68 * containsKey returns true for contained key
69 */
70 public void testContainsKey() {
71 NavigableMap map = map5();
72 assertTrue(map.containsKey(one));
73 assertFalse(map.containsKey(zero));
74 }
75
76 /**
77 * containsValue returns true for held values
78 */
79 public void testContainsValue() {
80 NavigableMap map = map5();
81 assertTrue(map.containsValue("A"));
82 assertFalse(map.containsValue("Z"));
83 }
84
85 /**
86 * get returns the correct element at the given key,
87 * or null if not present
88 */
89 public void testGet() {
90 NavigableMap map = map5();
91 assertEquals("A", (String)map.get(one));
92 NavigableMap empty = map0();
93 assertNull(empty.get(one));
94 }
95
96 /**
97 * isEmpty is true of empty map and false for non-empty
98 */
99 public void testIsEmpty() {
100 NavigableMap empty = map0();
101 NavigableMap map = map5();
102 assertTrue(empty.isEmpty());
103 assertFalse(map.isEmpty());
104 }
105
106 /**
107 * firstKey returns first key
108 */
109 public void testFirstKey() {
110 NavigableMap map = map5();
111 assertEquals(one, map.firstKey());
112 }
113
114 /**
115 * lastKey returns last key
116 */
117 public void testLastKey() {
118 NavigableMap map = map5();
119 assertEquals(five, map.lastKey());
120 }
121
122
123 /**
124 * keySet returns a Set containing all the keys
125 */
126 public void testKeySet() {
127 NavigableMap map = map5();
128 Set s = map.keySet();
129 assertEquals(5, s.size());
130 assertTrue(s.contains(one));
131 assertTrue(s.contains(two));
132 assertTrue(s.contains(three));
133 assertTrue(s.contains(four));
134 assertTrue(s.contains(five));
135 }
136
137 /**
138 * keySet is ordered
139 */
140 public void testKeySetOrder() {
141 NavigableMap map = map5();
142 Set s = map.keySet();
143 Iterator i = s.iterator();
144 Integer last = (Integer)i.next();
145 assertEquals(last, one);
146 while (i.hasNext()) {
147 Integer k = (Integer)i.next();
148 assertTrue(last.compareTo(k) < 0);
149 last = k;
150 }
151 }
152
153 /**
154 * values collection contains all values
155 */
156 public void testValues() {
157 NavigableMap map = map5();
158 Collection s = map.values();
159 assertEquals(5, s.size());
160 assertTrue(s.contains("A"));
161 assertTrue(s.contains("B"));
162 assertTrue(s.contains("C"));
163 assertTrue(s.contains("D"));
164 assertTrue(s.contains("E"));
165 }
166
167 /**
168 * entrySet contains all pairs
169 */
170 public void testEntrySet() {
171 NavigableMap map = map5();
172 Set s = map.entrySet();
173 assertEquals(5, s.size());
174 Iterator it = s.iterator();
175 while (it.hasNext()) {
176 Map.Entry e = (Map.Entry) it.next();
177 assertTrue(
178 (e.getKey().equals(one) && e.getValue().equals("A")) ||
179 (e.getKey().equals(two) && e.getValue().equals("B")) ||
180 (e.getKey().equals(three) && e.getValue().equals("C")) ||
181 (e.getKey().equals(four) && e.getValue().equals("D")) ||
182 (e.getKey().equals(five) && e.getValue().equals("E")));
183 }
184 }
185
186 /**
187 * putAll adds all key-value pairs from the given map
188 */
189 public void testPutAll() {
190 NavigableMap empty = map0();
191 NavigableMap map = map5();
192 empty.putAll(map);
193 assertEquals(5, empty.size());
194 assertTrue(empty.containsKey(one));
195 assertTrue(empty.containsKey(two));
196 assertTrue(empty.containsKey(three));
197 assertTrue(empty.containsKey(four));
198 assertTrue(empty.containsKey(five));
199 }
200
201 /**
202 * remove removes the correct key-value pair from the map
203 */
204 public void testRemove() {
205 NavigableMap map = map5();
206 map.remove(five);
207 assertEquals(4, map.size());
208 assertFalse(map.containsKey(five));
209 }
210
211 /**
212 * lowerEntry returns preceding entry.
213 */
214 public void testLowerEntry() {
215 NavigableMap map = map5();
216 Map.Entry e1 = map.lowerEntry(three);
217 assertEquals(two, e1.getKey());
218
219 Map.Entry e2 = map.lowerEntry(six);
220 assertEquals(five, e2.getKey());
221
222 Map.Entry e3 = map.lowerEntry(one);
223 assertNull(e3);
224
225 Map.Entry e4 = map.lowerEntry(zero);
226 assertNull(e4);
227
228 }
229
230 /**
231 * higherEntry returns next entry.
232 */
233 public void testHigherEntry() {
234 NavigableMap map = map5();
235 Map.Entry e1 = map.higherEntry(three);
236 assertEquals(four, e1.getKey());
237
238 Map.Entry e2 = map.higherEntry(zero);
239 assertEquals(one, e2.getKey());
240
241 Map.Entry e3 = map.higherEntry(five);
242 assertNull(e3);
243
244 Map.Entry e4 = map.higherEntry(six);
245 assertNull(e4);
246
247 }
248
249 /**
250 * floorEntry returns preceding entry.
251 */
252 public void testFloorEntry() {
253 NavigableMap map = map5();
254 Map.Entry e1 = map.floorEntry(three);
255 assertEquals(three, e1.getKey());
256
257 Map.Entry e2 = map.floorEntry(six);
258 assertEquals(five, e2.getKey());
259
260 Map.Entry e3 = map.floorEntry(one);
261 assertEquals(one, e3.getKey());
262
263 Map.Entry e4 = map.floorEntry(zero);
264 assertNull(e4);
265
266 }
267
268 /**
269 * ceilingEntry returns next entry.
270 */
271 public void testCeilingEntry() {
272 NavigableMap map = map5();
273 Map.Entry e1 = map.ceilingEntry(three);
274 assertEquals(three, e1.getKey());
275
276 Map.Entry e2 = map.ceilingEntry(zero);
277 assertEquals(one, e2.getKey());
278
279 Map.Entry e3 = map.ceilingEntry(five);
280 assertEquals(five, e3.getKey());
281
282 Map.Entry e4 = map.ceilingEntry(six);
283 assertNull(e4);
284
285 }
286
287 /**
288 * pollFirstEntry returns entries in order
289 */
290 public void testPollFirstEntry() {
291 NavigableMap map = map5();
292 Map.Entry e = map.pollFirstEntry();
293 assertEquals(one, e.getKey());
294 assertEquals("A", e.getValue());
295 e = map.pollFirstEntry();
296 assertEquals(two, e.getKey());
297 map.put(one, "A");
298 e = map.pollFirstEntry();
299 assertEquals(one, e.getKey());
300 assertEquals("A", e.getValue());
301 e = map.pollFirstEntry();
302 assertEquals(three, e.getKey());
303 map.remove(four);
304 e = map.pollFirstEntry();
305 assertEquals(five, e.getKey());
306 try {
307 e.setValue("A");
308 shouldThrow();
309 } catch (Exception ok) {
310 }
311 assertTrue(map.isEmpty());
312 Map.Entry f = map.firstEntry();
313 assertNull(f);
314 e = map.pollFirstEntry();
315 assertNull(e);
316 }
317
318 /**
319 * pollLastEntry returns entries in order
320 */
321 public void testPollLastEntry() {
322 NavigableMap map = map5();
323 Map.Entry e = map.pollLastEntry();
324 assertEquals(five, e.getKey());
325 assertEquals("E", e.getValue());
326 e = map.pollLastEntry();
327 assertEquals(four, e.getKey());
328 map.put(five, "E");
329 e = map.pollLastEntry();
330 assertEquals(five, e.getKey());
331 assertEquals("E", e.getValue());
332 e = map.pollLastEntry();
333 assertEquals(three, e.getKey());
334 map.remove(two);
335 e = map.pollLastEntry();
336 assertEquals(one, e.getKey());
337 try {
338 e.setValue("E");
339 shouldThrow();
340 } catch (Exception ok) {
341 }
342 e = map.pollLastEntry();
343 assertNull(e);
344 }
345
346 /**
347 * size returns the correct values
348 */
349 public void testSize() {
350 NavigableMap map = map5();
351 NavigableMap empty = map0();
352 assertEquals(0, empty.size());
353 assertEquals(5, map.size());
354 }
355
356 /**
357 * toString contains toString of elements
358 */
359 public void testToString() {
360 NavigableMap map = map5();
361 String s = map.toString();
362 for (int i = 1; i <= 5; ++i) {
363 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
364 }
365 }
366
367 // Exception tests
368
369 /**
370 * get(null) of nonempty map throws NPE
371 */
372 public void testGet_NullPointerException() {
373 try {
374 NavigableMap c = map5();
375 c.get(null);
376 shouldThrow();
377 } catch(NullPointerException e){}
378 }
379
380 /**
381 * containsKey(null) of nonempty map throws NPE
382 */
383 public void testContainsKey_NullPointerException() {
384 try {
385 NavigableMap c = map5();
386 c.containsKey(null);
387 shouldThrow();
388 } catch(NullPointerException e){}
389 }
390
391 /**
392 * put(null,x) throws NPE
393 */
394 public void testPut1_NullPointerException() {
395 try {
396 NavigableMap c = map5();
397 c.put(null, "whatever");
398 shouldThrow();
399 } catch(NullPointerException e){}
400 }
401
402 /**
403 * remove(null) throws NPE
404 */
405 public void testRemove1_NullPointerException() {
406 try {
407 NavigableMap c = map5();
408 c.remove(null);
409 shouldThrow();
410 } catch(NullPointerException e){}
411 }
412
413 /**
414 * A deserialized map equals original
415 */
416 public void testSerialization() {
417 NavigableMap q = map5();
418
419 try {
420 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
421 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
422 out.writeObject(q);
423 out.close();
424
425 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
426 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
427 NavigableMap r = (NavigableMap)in.readObject();
428 assertFalse(r.isEmpty());
429 assertEquals(q.size(), r.size());
430 assertTrue(q.equals(r));
431 assertTrue(r.equals(q));
432 } catch(Exception e){
433 e.printStackTrace();
434 unexpectedException();
435 }
436 }
437
438
439
440 /**
441 * subMap returns map with keys in requested range
442 */
443 public void testSubMapContents() {
444 NavigableMap map = map5();
445 SortedMap sm = map.subMap(two, four);
446 assertEquals(two, sm.firstKey());
447 assertEquals(three, sm.lastKey());
448 assertEquals(2, sm.size());
449 assertFalse(sm.containsKey(one));
450 assertTrue(sm.containsKey(two));
451 assertTrue(sm.containsKey(three));
452 assertFalse(sm.containsKey(four));
453 assertFalse(sm.containsKey(five));
454 Iterator i = sm.keySet().iterator();
455 Object k;
456 k = (Integer)(i.next());
457 assertEquals(two, k);
458 k = (Integer)(i.next());
459 assertEquals(three, k);
460 assertFalse(i.hasNext());
461 Iterator j = sm.keySet().iterator();
462 j.next();
463 j.remove();
464 assertFalse(map.containsKey(two));
465 assertEquals(4, map.size());
466 assertEquals(1, sm.size());
467 assertEquals(three, sm.firstKey());
468 assertEquals(three, sm.lastKey());
469 assertTrue(sm.remove(three) != null);
470 assertTrue(sm.isEmpty());
471 assertEquals(3, map.size());
472 }
473
474 public void testSubMapContents2() {
475 NavigableMap map = map5();
476 SortedMap sm = map.subMap(two, three);
477 assertEquals(1, sm.size());
478 assertEquals(two, sm.firstKey());
479 assertEquals(two, sm.lastKey());
480 assertFalse(sm.containsKey(one));
481 assertTrue(sm.containsKey(two));
482 assertFalse(sm.containsKey(three));
483 assertFalse(sm.containsKey(four));
484 assertFalse(sm.containsKey(five));
485 Iterator i = sm.keySet().iterator();
486 Object k;
487 k = (Integer)(i.next());
488 assertEquals(two, k);
489 assertFalse(i.hasNext());
490 Iterator j = sm.keySet().iterator();
491 j.next();
492 j.remove();
493 assertFalse(map.containsKey(two));
494 assertEquals(4, map.size());
495 assertEquals(0, sm.size());
496 assertTrue(sm.isEmpty());
497 assertTrue(sm.remove(three) == null);
498 assertEquals(4, map.size());
499 }
500
501 /**
502 * headMap returns map with keys in requested range
503 */
504 public void testHeadMapContents() {
505 NavigableMap map = map5();
506 SortedMap sm = map.headMap(four);
507 assertTrue(sm.containsKey(one));
508 assertTrue(sm.containsKey(two));
509 assertTrue(sm.containsKey(three));
510 assertFalse(sm.containsKey(four));
511 assertFalse(sm.containsKey(five));
512 Iterator i = sm.keySet().iterator();
513 Object k;
514 k = (Integer)(i.next());
515 assertEquals(one, k);
516 k = (Integer)(i.next());
517 assertEquals(two, k);
518 k = (Integer)(i.next());
519 assertEquals(three, k);
520 assertFalse(i.hasNext());
521 sm.clear();
522 assertTrue(sm.isEmpty());
523 assertEquals(2, map.size());
524 assertEquals(four, map.firstKey());
525 }
526
527 /**
528 * headMap returns map with keys in requested range
529 */
530 public void testTailMapContents() {
531 NavigableMap map = map5();
532 SortedMap sm = map.tailMap(two);
533 assertFalse(sm.containsKey(one));
534 assertTrue(sm.containsKey(two));
535 assertTrue(sm.containsKey(three));
536 assertTrue(sm.containsKey(four));
537 assertTrue(sm.containsKey(five));
538 Iterator i = sm.keySet().iterator();
539 Object k;
540 k = (Integer)(i.next());
541 assertEquals(two, k);
542 k = (Integer)(i.next());
543 assertEquals(three, k);
544 k = (Integer)(i.next());
545 assertEquals(four, k);
546 k = (Integer)(i.next());
547 assertEquals(five, k);
548 assertFalse(i.hasNext());
549
550 Iterator ei = sm.entrySet().iterator();
551 Map.Entry e;
552 e = (Map.Entry)(ei.next());
553 assertEquals(two, e.getKey());
554 assertEquals("B", e.getValue());
555 e = (Map.Entry)(ei.next());
556 assertEquals(three, e.getKey());
557 assertEquals("C", e.getValue());
558 e = (Map.Entry)(ei.next());
559 assertEquals(four, e.getKey());
560 assertEquals("D", e.getValue());
561 e = (Map.Entry)(ei.next());
562 assertEquals(five, e.getKey());
563 assertEquals("E", e.getValue());
564 assertFalse(i.hasNext());
565
566 SortedMap ssm = sm.tailMap(four);
567 assertEquals(four, ssm.firstKey());
568 assertEquals(five, ssm.lastKey());
569 assertTrue(ssm.remove(four) != null);
570 assertEquals(1, ssm.size());
571 assertEquals(3, sm.size());
572 assertEquals(4, map.size());
573 }
574
575 }