ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubMapTest.java
Revision: 1.8
Committed: Sat Nov 21 10:25:05 2009 UTC (14 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.7: +25 -36 lines
Log Message:
improve exception handling

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