ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubMapTest.java
Revision: 1.16
Committed: Tue May 31 16:16:24 2011 UTC (12 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.15: +14 -36 lines
Log Message:
use serialClone in serialization tests; update imports

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/publicdomain/zero/1.0/
5 */
6
7 import junit.framework.*;
8 import java.util.*;
9
10 public class TreeSubMapTest extends JSR166TestCase {
11 public static void main(String[] args) {
12 junit.textui.TestRunner.run(suite());
13 }
14 public static Test suite() {
15 return new TestSuite(TreeSubMapTest.class);
16 }
17
18 /**
19 * Create a map from Integers 1-5 to Strings "A"-"E".
20 */
21 private static NavigableMap map5() {
22 TreeMap map = new TreeMap();
23 assertTrue(map.isEmpty());
24 map.put(zero, "Z");
25 map.put(one, "A");
26 map.put(five, "E");
27 map.put(three, "C");
28 map.put(two, "B");
29 map.put(four, "D");
30 map.put(seven, "F");
31 assertFalse(map.isEmpty());
32 assertEquals(7, map.size());
33 return map.subMap(one, true, seven, false);
34 }
35
36 private static NavigableMap map0() {
37 TreeMap map = new TreeMap();
38 assertTrue(map.isEmpty());
39 return map.tailMap(one, true);
40 }
41
42 /**
43 * Create a map from Integers -5 to -1 to Strings "A"-"E".
44 */
45 private static NavigableMap dmap5() {
46 TreeMap map = new TreeMap();
47 assertTrue(map.isEmpty());
48 map.put(m1, "A");
49 map.put(m5, "E");
50 map.put(m3, "C");
51 map.put(m2, "B");
52 map.put(m4, "D");
53 assertFalse(map.isEmpty());
54 assertEquals(5, map.size());
55 return map.descendingMap();
56 }
57
58 private static NavigableMap dmap0() {
59 TreeMap map = new TreeMap();
60 assertTrue(map.isEmpty());
61 return map;
62 }
63
64 /**
65 * clear removes all pairs
66 */
67 public void testClear() {
68 NavigableMap map = map5();
69 map.clear();
70 assertEquals(map.size(), 0);
71 }
72
73 /**
74 * Maps with same contents are equal
75 */
76 public void testEquals() {
77 NavigableMap map1 = map5();
78 NavigableMap map2 = map5();
79 assertEquals(map1, map2);
80 assertEquals(map2, map1);
81 map1.clear();
82 assertFalse(map1.equals(map2));
83 assertFalse(map2.equals(map1));
84 }
85
86 /**
87 * containsKey returns true for contained key
88 */
89 public void testContainsKey() {
90 NavigableMap map = map5();
91 assertTrue(map.containsKey(one));
92 assertFalse(map.containsKey(zero));
93 }
94
95 /**
96 * containsValue returns true for held values
97 */
98 public void testContainsValue() {
99 NavigableMap map = map5();
100 assertTrue(map.containsValue("A"));
101 assertFalse(map.containsValue("Z"));
102 }
103
104 /**
105 * get returns the correct element at the given key,
106 * or null if not present
107 */
108 public void testGet() {
109 NavigableMap map = map5();
110 assertEquals("A", (String)map.get(one));
111 NavigableMap empty = map0();
112 assertNull(empty.get(one));
113 }
114
115 /**
116 * isEmpty is true of empty map and false for non-empty
117 */
118 public void testIsEmpty() {
119 NavigableMap empty = map0();
120 NavigableMap map = map5();
121 assertTrue(empty.isEmpty());
122 assertFalse(map.isEmpty());
123 }
124
125 /**
126 * firstKey returns first key
127 */
128 public void testFirstKey() {
129 NavigableMap map = map5();
130 assertEquals(one, map.firstKey());
131 }
132
133 /**
134 * lastKey returns last key
135 */
136 public void testLastKey() {
137 NavigableMap map = map5();
138 assertEquals(five, map.lastKey());
139 }
140
141 /**
142 * keySet returns a Set containing all the keys
143 */
144 public void testKeySet() {
145 NavigableMap map = map5();
146 Set s = map.keySet();
147 assertEquals(5, s.size());
148 assertTrue(s.contains(one));
149 assertTrue(s.contains(two));
150 assertTrue(s.contains(three));
151 assertTrue(s.contains(four));
152 assertTrue(s.contains(five));
153 }
154
155 /**
156 * keySet is ordered
157 */
158 public void testKeySetOrder() {
159 NavigableMap map = map5();
160 Set s = map.keySet();
161 Iterator i = s.iterator();
162 Integer last = (Integer)i.next();
163 assertEquals(last, one);
164 while (i.hasNext()) {
165 Integer k = (Integer)i.next();
166 assertTrue(last.compareTo(k) < 0);
167 last = k;
168 }
169 }
170
171 /**
172 * values collection contains all values
173 */
174 public void testValues() {
175 NavigableMap map = map5();
176 Collection s = map.values();
177 assertEquals(5, s.size());
178 assertTrue(s.contains("A"));
179 assertTrue(s.contains("B"));
180 assertTrue(s.contains("C"));
181 assertTrue(s.contains("D"));
182 assertTrue(s.contains("E"));
183 }
184
185 /**
186 * entrySet contains all pairs
187 */
188 public void testEntrySet() {
189 NavigableMap map = map5();
190 Set s = map.entrySet();
191 assertEquals(5, s.size());
192 Iterator it = s.iterator();
193 while (it.hasNext()) {
194 Map.Entry e = (Map.Entry) it.next();
195 assertTrue(
196 (e.getKey().equals(one) && e.getValue().equals("A")) ||
197 (e.getKey().equals(two) && e.getValue().equals("B")) ||
198 (e.getKey().equals(three) && e.getValue().equals("C")) ||
199 (e.getKey().equals(four) && e.getValue().equals("D")) ||
200 (e.getKey().equals(five) && e.getValue().equals("E")));
201 }
202 }
203
204 /**
205 * putAll adds all key-value pairs from the given map
206 */
207 public void testPutAll() {
208 NavigableMap empty = map0();
209 NavigableMap map = map5();
210 empty.putAll(map);
211 assertEquals(5, empty.size());
212 assertTrue(empty.containsKey(one));
213 assertTrue(empty.containsKey(two));
214 assertTrue(empty.containsKey(three));
215 assertTrue(empty.containsKey(four));
216 assertTrue(empty.containsKey(five));
217 }
218
219 /**
220 * remove removes the correct key-value pair from the map
221 */
222 public void testRemove() {
223 NavigableMap map = map5();
224 map.remove(five);
225 assertEquals(4, map.size());
226 assertFalse(map.containsKey(five));
227 }
228
229 /**
230 * lowerEntry returns preceding entry.
231 */
232 public void testLowerEntry() {
233 NavigableMap map = map5();
234 Map.Entry e1 = map.lowerEntry(three);
235 assertEquals(two, e1.getKey());
236
237 Map.Entry e2 = map.lowerEntry(six);
238 assertEquals(five, e2.getKey());
239
240 Map.Entry e3 = map.lowerEntry(one);
241 assertNull(e3);
242
243 Map.Entry e4 = map.lowerEntry(zero);
244 assertNull(e4);
245 }
246
247 /**
248 * higherEntry returns next entry.
249 */
250 public void testHigherEntry() {
251 NavigableMap map = map5();
252 Map.Entry e1 = map.higherEntry(three);
253 assertEquals(four, e1.getKey());
254
255 Map.Entry e2 = map.higherEntry(zero);
256 assertEquals(one, e2.getKey());
257
258 Map.Entry e3 = map.higherEntry(five);
259 assertNull(e3);
260
261 Map.Entry e4 = map.higherEntry(six);
262 assertNull(e4);
263 }
264
265 /**
266 * floorEntry returns preceding entry.
267 */
268 public void testFloorEntry() {
269 NavigableMap map = map5();
270 Map.Entry e1 = map.floorEntry(three);
271 assertEquals(three, e1.getKey());
272
273 Map.Entry e2 = map.floorEntry(six);
274 assertEquals(five, e2.getKey());
275
276 Map.Entry e3 = map.floorEntry(one);
277 assertEquals(one, e3.getKey());
278
279 Map.Entry e4 = map.floorEntry(zero);
280 assertNull(e4);
281 }
282
283 /**
284 * ceilingEntry returns next entry.
285 */
286 public void testCeilingEntry() {
287 NavigableMap map = map5();
288 Map.Entry e1 = map.ceilingEntry(three);
289 assertEquals(three, e1.getKey());
290
291 Map.Entry e2 = map.ceilingEntry(zero);
292 assertEquals(one, e2.getKey());
293
294 Map.Entry e3 = map.ceilingEntry(five);
295 assertEquals(five, e3.getKey());
296
297 Map.Entry e4 = map.ceilingEntry(six);
298 assertNull(e4);
299 }
300
301 /**
302 * pollFirstEntry returns entries in order
303 */
304 public void testPollFirstEntry() {
305 NavigableMap map = map5();
306 Map.Entry e = map.pollFirstEntry();
307 assertEquals(one, e.getKey());
308 assertEquals("A", e.getValue());
309 e = map.pollFirstEntry();
310 assertEquals(two, e.getKey());
311 map.put(one, "A");
312 e = map.pollFirstEntry();
313 assertEquals(one, e.getKey());
314 assertEquals("A", e.getValue());
315 e = map.pollFirstEntry();
316 assertEquals(three, e.getKey());
317 map.remove(four);
318 e = map.pollFirstEntry();
319 assertEquals(five, e.getKey());
320 try {
321 e.setValue("A");
322 shouldThrow();
323 } catch (UnsupportedOperationException success) {}
324 assertTrue(map.isEmpty());
325 Map.Entry f = map.firstEntry();
326 assertNull(f);
327 e = map.pollFirstEntry();
328 assertNull(e);
329 }
330
331 /**
332 * pollLastEntry returns entries in order
333 */
334 public void testPollLastEntry() {
335 NavigableMap map = map5();
336 Map.Entry e = map.pollLastEntry();
337 assertEquals(five, e.getKey());
338 assertEquals("E", e.getValue());
339 e = map.pollLastEntry();
340 assertEquals(four, e.getKey());
341 map.put(five, "E");
342 e = map.pollLastEntry();
343 assertEquals(five, e.getKey());
344 assertEquals("E", e.getValue());
345 e = map.pollLastEntry();
346 assertEquals(three, e.getKey());
347 map.remove(two);
348 e = map.pollLastEntry();
349 assertEquals(one, e.getKey());
350 try {
351 e.setValue("E");
352 shouldThrow();
353 } catch (UnsupportedOperationException success) {}
354 e = map.pollLastEntry();
355 assertNull(e);
356 }
357
358 /**
359 * size returns the correct values
360 */
361 public void testSize() {
362 NavigableMap map = map5();
363 NavigableMap empty = map0();
364 assertEquals(0, empty.size());
365 assertEquals(5, map.size());
366 }
367
368 /**
369 * toString contains toString of elements
370 */
371 public void testToString() {
372 NavigableMap map = map5();
373 String s = map.toString();
374 for (int i = 1; i <= 5; ++i) {
375 assertTrue(s.contains(String.valueOf(i)));
376 }
377 }
378
379 // Exception tests
380
381 /**
382 * get(null) of nonempty map throws NPE
383 */
384 public void testGet_NullPointerException() {
385 try {
386 NavigableMap c = map5();
387 c.get(null);
388 shouldThrow();
389 } catch (NullPointerException success) {}
390 }
391
392 /**
393 * containsKey(null) of nonempty map throws NPE
394 */
395 public void testContainsKey_NullPointerException() {
396 try {
397 NavigableMap c = map5();
398 c.containsKey(null);
399 shouldThrow();
400 } catch (NullPointerException success) {}
401 }
402
403 /**
404 * put(null,x) throws NPE
405 */
406 public void testPut1_NullPointerException() {
407 try {
408 NavigableMap c = map5();
409 c.put(null, "whatever");
410 shouldThrow();
411 } catch (NullPointerException success) {}
412 }
413
414 /**
415 * remove(null) throws NPE
416 */
417 public void testRemove1_NullPointerException() {
418 try {
419 NavigableMap c = map5();
420 c.remove(null);
421 shouldThrow();
422 } catch (NullPointerException success) {}
423 }
424
425 /**
426 * A deserialized map equals original
427 */
428 public void testSerialization() throws Exception {
429 NavigableMap x = map5();
430 NavigableMap y = serialClone(x);
431
432 assertTrue(x != y);
433 assertEquals(x.size(), y.size());
434 assertEquals(x.toString(), y.toString());
435 assertEquals(x, y);
436 assertEquals(y, x);
437 }
438
439 /**
440 * subMap returns map with keys in requested range
441 */
442 public void testSubMapContents() {
443 NavigableMap map = map5();
444 SortedMap sm = map.subMap(two, four);
445 assertEquals(two, sm.firstKey());
446 assertEquals(three, sm.lastKey());
447 assertEquals(2, sm.size());
448 assertFalse(sm.containsKey(one));
449 assertTrue(sm.containsKey(two));
450 assertTrue(sm.containsKey(three));
451 assertFalse(sm.containsKey(four));
452 assertFalse(sm.containsKey(five));
453 Iterator i = sm.keySet().iterator();
454 Object k;
455 k = (Integer)(i.next());
456 assertEquals(two, k);
457 k = (Integer)(i.next());
458 assertEquals(three, k);
459 assertFalse(i.hasNext());
460 Iterator j = sm.keySet().iterator();
461 j.next();
462 j.remove();
463 assertFalse(map.containsKey(two));
464 assertEquals(4, map.size());
465 assertEquals(1, sm.size());
466 assertEquals(three, sm.firstKey());
467 assertEquals(three, sm.lastKey());
468 assertEquals("C", sm.remove(three));
469 assertTrue(sm.isEmpty());
470 assertEquals(3, map.size());
471 }
472
473 public void testSubMapContents2() {
474 NavigableMap map = map5();
475 SortedMap sm = map.subMap(two, three);
476 assertEquals(1, sm.size());
477 assertEquals(two, sm.firstKey());
478 assertEquals(two, sm.lastKey());
479 assertFalse(sm.containsKey(one));
480 assertTrue(sm.containsKey(two));
481 assertFalse(sm.containsKey(three));
482 assertFalse(sm.containsKey(four));
483 assertFalse(sm.containsKey(five));
484 Iterator i = sm.keySet().iterator();
485 Object k;
486 k = (Integer)(i.next());
487 assertEquals(two, k);
488 assertFalse(i.hasNext());
489 Iterator j = sm.keySet().iterator();
490 j.next();
491 j.remove();
492 assertFalse(map.containsKey(two));
493 assertEquals(4, map.size());
494 assertEquals(0, sm.size());
495 assertTrue(sm.isEmpty());
496 assertSame(sm.remove(three), null);
497 assertEquals(4, map.size());
498 }
499
500 /**
501 * headMap returns map with keys in requested range
502 */
503 public void testHeadMapContents() {
504 NavigableMap map = map5();
505 SortedMap sm = map.headMap(four);
506 assertTrue(sm.containsKey(one));
507 assertTrue(sm.containsKey(two));
508 assertTrue(sm.containsKey(three));
509 assertFalse(sm.containsKey(four));
510 assertFalse(sm.containsKey(five));
511 Iterator i = sm.keySet().iterator();
512 Object k;
513 k = (Integer)(i.next());
514 assertEquals(one, k);
515 k = (Integer)(i.next());
516 assertEquals(two, k);
517 k = (Integer)(i.next());
518 assertEquals(three, k);
519 assertFalse(i.hasNext());
520 sm.clear();
521 assertTrue(sm.isEmpty());
522 assertEquals(2, map.size());
523 assertEquals(four, map.firstKey());
524 }
525
526 /**
527 * headMap returns map with keys in requested range
528 */
529 public void testTailMapContents() {
530 NavigableMap map = map5();
531 SortedMap sm = map.tailMap(two);
532 assertFalse(sm.containsKey(one));
533 assertTrue(sm.containsKey(two));
534 assertTrue(sm.containsKey(three));
535 assertTrue(sm.containsKey(four));
536 assertTrue(sm.containsKey(five));
537 Iterator i = sm.keySet().iterator();
538 Object k;
539 k = (Integer)(i.next());
540 assertEquals(two, k);
541 k = (Integer)(i.next());
542 assertEquals(three, k);
543 k = (Integer)(i.next());
544 assertEquals(four, k);
545 k = (Integer)(i.next());
546 assertEquals(five, k);
547 assertFalse(i.hasNext());
548
549 Iterator ei = sm.entrySet().iterator();
550 Map.Entry e;
551 e = (Map.Entry)(ei.next());
552 assertEquals(two, e.getKey());
553 assertEquals("B", e.getValue());
554 e = (Map.Entry)(ei.next());
555 assertEquals(three, e.getKey());
556 assertEquals("C", e.getValue());
557 e = (Map.Entry)(ei.next());
558 assertEquals(four, e.getKey());
559 assertEquals("D", e.getValue());
560 e = (Map.Entry)(ei.next());
561 assertEquals(five, e.getKey());
562 assertEquals("E", e.getValue());
563 assertFalse(i.hasNext());
564
565 SortedMap ssm = sm.tailMap(four);
566 assertEquals(four, ssm.firstKey());
567 assertEquals(five, ssm.lastKey());
568 assertEquals("D", ssm.remove(four));
569 assertEquals(1, ssm.size());
570 assertEquals(3, sm.size());
571 assertEquals(4, map.size());
572 }
573
574 /**
575 * clear removes all pairs
576 */
577 public void testDescendingClear() {
578 NavigableMap map = dmap5();
579 map.clear();
580 assertEquals(map.size(), 0);
581 }
582
583 /**
584 * Maps with same contents are equal
585 */
586 public void testDescendingEquals() {
587 NavigableMap map1 = dmap5();
588 NavigableMap map2 = dmap5();
589 assertEquals(map1, map2);
590 assertEquals(map2, map1);
591 map1.clear();
592 assertFalse(map1.equals(map2));
593 assertFalse(map2.equals(map1));
594 }
595
596 /**
597 * containsKey returns true for contained key
598 */
599 public void testDescendingContainsKey() {
600 NavigableMap map = dmap5();
601 assertTrue(map.containsKey(m1));
602 assertFalse(map.containsKey(zero));
603 }
604
605 /**
606 * containsValue returns true for held values
607 */
608 public void testDescendingContainsValue() {
609 NavigableMap map = dmap5();
610 assertTrue(map.containsValue("A"));
611 assertFalse(map.containsValue("Z"));
612 }
613
614 /**
615 * get returns the correct element at the given key,
616 * or null if not present
617 */
618 public void testDescendingGet() {
619 NavigableMap map = dmap5();
620 assertEquals("A", (String)map.get(m1));
621 NavigableMap empty = dmap0();
622 assertNull(empty.get(m1));
623 }
624
625 /**
626 * isEmpty is true of empty map and false for non-empty
627 */
628 public void testDescendingIsEmpty() {
629 NavigableMap empty = dmap0();
630 NavigableMap map = dmap5();
631 assertTrue(empty.isEmpty());
632 assertFalse(map.isEmpty());
633 }
634
635 /**
636 * firstKey returns first key
637 */
638 public void testDescendingFirstKey() {
639 NavigableMap map = dmap5();
640 assertEquals(m1, map.firstKey());
641 }
642
643 /**
644 * lastKey returns last key
645 */
646 public void testDescendingLastKey() {
647 NavigableMap map = dmap5();
648 assertEquals(m5, map.lastKey());
649 }
650
651 /**
652 * keySet returns a Set containing all the keys
653 */
654 public void testDescendingKeySet() {
655 NavigableMap map = dmap5();
656 Set s = map.keySet();
657 assertEquals(5, s.size());
658 assertTrue(s.contains(m1));
659 assertTrue(s.contains(m2));
660 assertTrue(s.contains(m3));
661 assertTrue(s.contains(m4));
662 assertTrue(s.contains(m5));
663 }
664
665 /**
666 * keySet is ordered
667 */
668 public void testDescendingKeySetOrder() {
669 NavigableMap map = dmap5();
670 Set s = map.keySet();
671 Iterator i = s.iterator();
672 Integer last = (Integer)i.next();
673 assertEquals(last, m1);
674 while (i.hasNext()) {
675 Integer k = (Integer)i.next();
676 assertTrue(last.compareTo(k) > 0);
677 last = k;
678 }
679 }
680
681 /**
682 * values collection contains all values
683 */
684 public void testDescendingValues() {
685 NavigableMap map = dmap5();
686 Collection s = map.values();
687 assertEquals(5, s.size());
688 assertTrue(s.contains("A"));
689 assertTrue(s.contains("B"));
690 assertTrue(s.contains("C"));
691 assertTrue(s.contains("D"));
692 assertTrue(s.contains("E"));
693 }
694
695 /**
696 * keySet.toArray returns contains all keys
697 */
698 public void testDescendingAscendingKeySetToArray() {
699 NavigableMap map = dmap5();
700 Set s = map.keySet();
701 Object[] ar = s.toArray();
702 assertTrue(s.containsAll(Arrays.asList(ar)));
703 assertEquals(5, ar.length);
704 ar[0] = m10;
705 assertFalse(s.containsAll(Arrays.asList(ar)));
706 }
707
708 /**
709 * descendingkeySet.toArray returns contains all keys
710 */
711 public void testDescendingDescendingKeySetToArray() {
712 NavigableMap map = dmap5();
713 Set s = map.descendingKeySet();
714 Object[] ar = s.toArray();
715 assertEquals(5, ar.length);
716 assertTrue(s.containsAll(Arrays.asList(ar)));
717 ar[0] = m10;
718 assertFalse(s.containsAll(Arrays.asList(ar)));
719 }
720
721 /**
722 * Values.toArray contains all values
723 */
724 public void testDescendingValuesToArray() {
725 NavigableMap map = dmap5();
726 Collection v = map.values();
727 Object[] ar = v.toArray();
728 ArrayList s = new ArrayList(Arrays.asList(ar));
729 assertEquals(5, ar.length);
730 assertTrue(s.contains("A"));
731 assertTrue(s.contains("B"));
732 assertTrue(s.contains("C"));
733 assertTrue(s.contains("D"));
734 assertTrue(s.contains("E"));
735 }
736
737 /**
738 * entrySet contains all pairs
739 */
740 public void testDescendingEntrySet() {
741 NavigableMap map = dmap5();
742 Set s = map.entrySet();
743 assertEquals(5, s.size());
744 Iterator it = s.iterator();
745 while (it.hasNext()) {
746 Map.Entry e = (Map.Entry) it.next();
747 assertTrue(
748 (e.getKey().equals(m1) && e.getValue().equals("A")) ||
749 (e.getKey().equals(m2) && e.getValue().equals("B")) ||
750 (e.getKey().equals(m3) && e.getValue().equals("C")) ||
751 (e.getKey().equals(m4) && e.getValue().equals("D")) ||
752 (e.getKey().equals(m5) && e.getValue().equals("E")));
753 }
754 }
755
756 /**
757 * putAll adds all key-value pairs from the given map
758 */
759 public void testDescendingPutAll() {
760 NavigableMap empty = dmap0();
761 NavigableMap map = dmap5();
762 empty.putAll(map);
763 assertEquals(5, empty.size());
764 assertTrue(empty.containsKey(m1));
765 assertTrue(empty.containsKey(m2));
766 assertTrue(empty.containsKey(m3));
767 assertTrue(empty.containsKey(m4));
768 assertTrue(empty.containsKey(m5));
769 }
770
771 /**
772 * remove removes the correct key-value pair from the map
773 */
774 public void testDescendingRemove() {
775 NavigableMap map = dmap5();
776 map.remove(m5);
777 assertEquals(4, map.size());
778 assertFalse(map.containsKey(m5));
779 }
780
781 /**
782 * lowerEntry returns preceding entry.
783 */
784 public void testDescendingLowerEntry() {
785 NavigableMap map = dmap5();
786 Map.Entry e1 = map.lowerEntry(m3);
787 assertEquals(m2, e1.getKey());
788
789 Map.Entry e2 = map.lowerEntry(m6);
790 assertEquals(m5, e2.getKey());
791
792 Map.Entry e3 = map.lowerEntry(m1);
793 assertNull(e3);
794
795 Map.Entry e4 = map.lowerEntry(zero);
796 assertNull(e4);
797 }
798
799 /**
800 * higherEntry returns next entry.
801 */
802 public void testDescendingHigherEntry() {
803 NavigableMap map = dmap5();
804 Map.Entry e1 = map.higherEntry(m3);
805 assertEquals(m4, e1.getKey());
806
807 Map.Entry e2 = map.higherEntry(zero);
808 assertEquals(m1, e2.getKey());
809
810 Map.Entry e3 = map.higherEntry(m5);
811 assertNull(e3);
812
813 Map.Entry e4 = map.higherEntry(m6);
814 assertNull(e4);
815 }
816
817 /**
818 * floorEntry returns preceding entry.
819 */
820 public void testDescendingFloorEntry() {
821 NavigableMap map = dmap5();
822 Map.Entry e1 = map.floorEntry(m3);
823 assertEquals(m3, e1.getKey());
824
825 Map.Entry e2 = map.floorEntry(m6);
826 assertEquals(m5, e2.getKey());
827
828 Map.Entry e3 = map.floorEntry(m1);
829 assertEquals(m1, e3.getKey());
830
831 Map.Entry e4 = map.floorEntry(zero);
832 assertNull(e4);
833 }
834
835 /**
836 * ceilingEntry returns next entry.
837 */
838 public void testDescendingCeilingEntry() {
839 NavigableMap map = dmap5();
840 Map.Entry e1 = map.ceilingEntry(m3);
841 assertEquals(m3, e1.getKey());
842
843 Map.Entry e2 = map.ceilingEntry(zero);
844 assertEquals(m1, e2.getKey());
845
846 Map.Entry e3 = map.ceilingEntry(m5);
847 assertEquals(m5, e3.getKey());
848
849 Map.Entry e4 = map.ceilingEntry(m6);
850 assertNull(e4);
851 }
852
853 /**
854 * pollFirstEntry returns entries in order
855 */
856 public void testDescendingPollFirstEntry() {
857 NavigableMap map = dmap5();
858 Map.Entry e = map.pollFirstEntry();
859 assertEquals(m1, e.getKey());
860 assertEquals("A", e.getValue());
861 e = map.pollFirstEntry();
862 assertEquals(m2, e.getKey());
863 map.put(m1, "A");
864 e = map.pollFirstEntry();
865 assertEquals(m1, e.getKey());
866 assertEquals("A", e.getValue());
867 e = map.pollFirstEntry();
868 assertEquals(m3, e.getKey());
869 map.remove(m4);
870 e = map.pollFirstEntry();
871 assertEquals(m5, e.getKey());
872 try {
873 e.setValue("A");
874 shouldThrow();
875 } catch (UnsupportedOperationException success) {}
876 e = map.pollFirstEntry();
877 assertNull(e);
878 }
879
880 /**
881 * pollLastEntry returns entries in order
882 */
883 public void testDescendingPollLastEntry() {
884 NavigableMap map = dmap5();
885 Map.Entry e = map.pollLastEntry();
886 assertEquals(m5, e.getKey());
887 assertEquals("E", e.getValue());
888 e = map.pollLastEntry();
889 assertEquals(m4, e.getKey());
890 map.put(m5, "E");
891 e = map.pollLastEntry();
892 assertEquals(m5, e.getKey());
893 assertEquals("E", e.getValue());
894 e = map.pollLastEntry();
895 assertEquals(m3, e.getKey());
896 map.remove(m2);
897 e = map.pollLastEntry();
898 assertEquals(m1, e.getKey());
899 try {
900 e.setValue("E");
901 shouldThrow();
902 } catch (UnsupportedOperationException success) {}
903 e = map.pollLastEntry();
904 assertNull(e);
905 }
906
907 /**
908 * size returns the correct values
909 */
910 public void testDescendingSize() {
911 NavigableMap map = dmap5();
912 NavigableMap empty = dmap0();
913 assertEquals(0, empty.size());
914 assertEquals(5, map.size());
915 }
916
917 /**
918 * toString contains toString of elements
919 */
920 public void testDescendingToString() {
921 NavigableMap map = dmap5();
922 String s = map.toString();
923 for (int i = 1; i <= 5; ++i) {
924 assertTrue(s.contains(String.valueOf(i)));
925 }
926 }
927
928 // Exception testDescendings
929
930 /**
931 * get(null) of nonempty map throws NPE
932 */
933 public void testDescendingGet_NullPointerException() {
934 try {
935 NavigableMap c = dmap5();
936 c.get(null);
937 shouldThrow();
938 } catch (NullPointerException success) {}
939 }
940
941 /**
942 * put(null,x) throws NPE
943 */
944 public void testDescendingPut1_NullPointerException() {
945 try {
946 NavigableMap c = dmap5();
947 c.put(null, "whatever");
948 shouldThrow();
949 } catch (NullPointerException success) {}
950 }
951
952 /**
953 * A deserialized map equals original
954 */
955 public void testDescendingSerialization() throws Exception {
956 NavigableMap x = dmap5();
957 NavigableMap y = serialClone(x);
958
959 assertTrue(x != y);
960 assertEquals(x.size(), y.size());
961 assertEquals(x.toString(), y.toString());
962 assertEquals(x, y);
963 assertEquals(y, x);
964 }
965
966 /**
967 * subMap returns map with keys in requested range
968 */
969 public void testDescendingSubMapContents() {
970 NavigableMap map = dmap5();
971 SortedMap sm = map.subMap(m2, m4);
972 assertEquals(m2, sm.firstKey());
973 assertEquals(m3, sm.lastKey());
974 assertEquals(2, sm.size());
975 assertFalse(sm.containsKey(m1));
976 assertTrue(sm.containsKey(m2));
977 assertTrue(sm.containsKey(m3));
978 assertFalse(sm.containsKey(m4));
979 assertFalse(sm.containsKey(m5));
980 Iterator i = sm.keySet().iterator();
981 Object k;
982 k = (Integer)(i.next());
983 assertEquals(m2, k);
984 k = (Integer)(i.next());
985 assertEquals(m3, k);
986 assertFalse(i.hasNext());
987 Iterator j = sm.keySet().iterator();
988 j.next();
989 j.remove();
990 assertFalse(map.containsKey(m2));
991 assertEquals(4, map.size());
992 assertEquals(1, sm.size());
993 assertEquals(m3, sm.firstKey());
994 assertEquals(m3, sm.lastKey());
995 assertEquals("C", sm.remove(m3));
996 assertTrue(sm.isEmpty());
997 assertEquals(3, map.size());
998 }
999
1000 public void testDescendingSubMapContents2() {
1001 NavigableMap map = dmap5();
1002 SortedMap sm = map.subMap(m2, m3);
1003 assertEquals(1, sm.size());
1004 assertEquals(m2, sm.firstKey());
1005 assertEquals(m2, sm.lastKey());
1006 assertFalse(sm.containsKey(m1));
1007 assertTrue(sm.containsKey(m2));
1008 assertFalse(sm.containsKey(m3));
1009 assertFalse(sm.containsKey(m4));
1010 assertFalse(sm.containsKey(m5));
1011 Iterator i = sm.keySet().iterator();
1012 Object k;
1013 k = (Integer)(i.next());
1014 assertEquals(m2, k);
1015 assertFalse(i.hasNext());
1016 Iterator j = sm.keySet().iterator();
1017 j.next();
1018 j.remove();
1019 assertFalse(map.containsKey(m2));
1020 assertEquals(4, map.size());
1021 assertEquals(0, sm.size());
1022 assertTrue(sm.isEmpty());
1023 assertSame(sm.remove(m3), null);
1024 assertEquals(4, map.size());
1025 }
1026
1027 /**
1028 * headMap returns map with keys in requested range
1029 */
1030 public void testDescendingHeadMapContents() {
1031 NavigableMap map = dmap5();
1032 SortedMap sm = map.headMap(m4);
1033 assertTrue(sm.containsKey(m1));
1034 assertTrue(sm.containsKey(m2));
1035 assertTrue(sm.containsKey(m3));
1036 assertFalse(sm.containsKey(m4));
1037 assertFalse(sm.containsKey(m5));
1038 Iterator i = sm.keySet().iterator();
1039 Object k;
1040 k = (Integer)(i.next());
1041 assertEquals(m1, k);
1042 k = (Integer)(i.next());
1043 assertEquals(m2, k);
1044 k = (Integer)(i.next());
1045 assertEquals(m3, k);
1046 assertFalse(i.hasNext());
1047 sm.clear();
1048 assertTrue(sm.isEmpty());
1049 assertEquals(2, map.size());
1050 assertEquals(m4, map.firstKey());
1051 }
1052
1053 /**
1054 * headMap returns map with keys in requested range
1055 */
1056 public void testDescendingTailMapContents() {
1057 NavigableMap map = dmap5();
1058 SortedMap sm = map.tailMap(m2);
1059 assertFalse(sm.containsKey(m1));
1060 assertTrue(sm.containsKey(m2));
1061 assertTrue(sm.containsKey(m3));
1062 assertTrue(sm.containsKey(m4));
1063 assertTrue(sm.containsKey(m5));
1064 Iterator i = sm.keySet().iterator();
1065 Object k;
1066 k = (Integer)(i.next());
1067 assertEquals(m2, k);
1068 k = (Integer)(i.next());
1069 assertEquals(m3, k);
1070 k = (Integer)(i.next());
1071 assertEquals(m4, k);
1072 k = (Integer)(i.next());
1073 assertEquals(m5, k);
1074 assertFalse(i.hasNext());
1075
1076 Iterator ei = sm.entrySet().iterator();
1077 Map.Entry e;
1078 e = (Map.Entry)(ei.next());
1079 assertEquals(m2, e.getKey());
1080 assertEquals("B", e.getValue());
1081 e = (Map.Entry)(ei.next());
1082 assertEquals(m3, e.getKey());
1083 assertEquals("C", e.getValue());
1084 e = (Map.Entry)(ei.next());
1085 assertEquals(m4, e.getKey());
1086 assertEquals("D", e.getValue());
1087 e = (Map.Entry)(ei.next());
1088 assertEquals(m5, e.getKey());
1089 assertEquals("E", e.getValue());
1090 assertFalse(i.hasNext());
1091
1092 SortedMap ssm = sm.tailMap(m4);
1093 assertEquals(m4, ssm.firstKey());
1094 assertEquals(m5, ssm.lastKey());
1095 assertEquals("D", ssm.remove(m4));
1096 assertEquals(1, ssm.size());
1097 assertEquals(3, sm.size());
1098 assertEquals(4, map.size());
1099 }
1100
1101 }