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

# User Rev Content
1 dl 1.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 jsr166 1.7 junit.textui.TestRunner.run (suite());
15 dl 1.1 }
16     public static Test suite() {
17 jsr166 1.7 return new TestSuite(TreeSubMapTest.class);
18 dl 1.1 }
19    
20     /**
21     * Create a map from Integers 1-5 to Strings "A"-"E".
22     */
23 jsr166 1.4 private static NavigableMap map5() {
24 jsr166 1.7 TreeMap map = new TreeMap();
25 dl 1.1 assertTrue(map.isEmpty());
26 jsr166 1.7 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 dl 1.1 assertFalse(map.isEmpty());
34     assertEquals(7, map.size());
35 dl 1.3 return map.subMap(one, true, seven, false);
36 dl 1.1 }
37    
38 jsr166 1.4 private static NavigableMap map0() {
39 jsr166 1.7 TreeMap map = new TreeMap();
40 dl 1.1 assertTrue(map.isEmpty());
41 dl 1.3 return map.tailMap(one, true);
42     }
43    
44     /**
45     * Create a map from Integers -5 to -1 to Strings "A"-"E".
46     */
47 jsr166 1.4 private static NavigableMap dmap5() {
48 jsr166 1.7 TreeMap map = new TreeMap();
49 dl 1.3 assertTrue(map.isEmpty());
50 jsr166 1.7 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 dl 1.3 assertFalse(map.isEmpty());
56     assertEquals(5, map.size());
57 jsr166 1.7 return map.descendingMap();
58 dl 1.3 }
59    
60 jsr166 1.4 private static NavigableMap dmap0() {
61 jsr166 1.7 TreeMap map = new TreeMap();
62 dl 1.3 assertTrue(map.isEmpty());
63     return map;
64 dl 1.1 }
65    
66     /**
67     * clear removes all pairs
68     */
69     public void testClear() {
70     NavigableMap map = map5();
71 jsr166 1.7 map.clear();
72     assertEquals(map.size(), 0);
73 dl 1.1 }
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 jsr166 1.7 map1.clear();
85 dl 1.1 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 jsr166 1.7 assertTrue(map.containsKey(one));
95 dl 1.1 assertFalse(map.containsKey(zero));
96     }
97    
98     /**
99     * containsValue returns true for held values
100     */
101     public void testContainsValue() {
102     NavigableMap map = map5();
103 jsr166 1.7 assertTrue(map.containsValue("A"));
104 dl 1.1 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 jsr166 1.7 assertEquals("A", (String)map.get(one));
114 dl 1.1 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 jsr166 1.7 assertTrue(empty.isEmpty());
125 dl 1.1 assertFalse(map.isEmpty());
126     }
127    
128     /**
129     * firstKey returns first key
130     */
131     public void testFirstKey() {
132     NavigableMap map = map5();
133 jsr166 1.7 assertEquals(one, map.firstKey());
134 dl 1.1 }
135    
136     /**
137     * lastKey returns last key
138     */
139     public void testLastKey() {
140     NavigableMap map = map5();
141 jsr166 1.7 assertEquals(five, map.lastKey());
142 dl 1.1 }
143    
144    
145     /**
146     * keySet returns a Set containing all the keys
147     */
148     public void testKeySet() {
149     NavigableMap map = map5();
150 jsr166 1.7 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 dl 1.1 }
158    
159     /**
160     * keySet is ordered
161     */
162     public void testKeySetOrder() {
163     NavigableMap map = map5();
164 jsr166 1.7 Set s = map.keySet();
165 dl 1.1 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 jsr166 1.7 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 dl 1.1 }
188    
189     /**
190     * entrySet contains all pairs
191     */
192     public void testEntrySet() {
193     NavigableMap map = map5();
194 jsr166 1.7 Set s = map.entrySet();
195     assertEquals(5, s.size());
196 dl 1.1 Iterator it = s.iterator();
197     while (it.hasNext()) {
198     Map.Entry e = (Map.Entry) it.next();
199 jsr166 1.4 assertTrue(
200 dl 1.1 (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 jsr166 1.7 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 dl 1.1 }
222    
223     /**
224     * remove removes the correct key-value pair from the map
225     */
226     public void testRemove() {
227     NavigableMap map = map5();
228 jsr166 1.7 map.remove(five);
229     assertEquals(4, map.size());
230     assertFalse(map.containsKey(five));
231 dl 1.1 }
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 jsr166 1.7 assertEquals(0, empty.size());
375     assertEquals(5, map.size());
376 dl 1.1 }
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 jsr166 1.4 }
388 dl 1.1
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 jsr166 1.6 } catch (NullPointerException e) {}
400 dl 1.1 }
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 jsr166 1.6 } catch (NullPointerException e) {}
411 dl 1.1 }
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 jsr166 1.6 } catch (NullPointerException e) {}
422 dl 1.1 }
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 jsr166 1.6 } catch (NullPointerException e) {}
433 dl 1.1 }
434    
435     /**
436     * A deserialized map equals original
437     */
438 jsr166 1.8 public void testSerialization() throws Exception {
439 dl 1.1 NavigableMap q = map5();
440    
441 jsr166 1.8 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 dl 1.1 }
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 dl 1.3
592     /**
593     * clear removes all pairs
594     */
595     public void testDescendingClear() {
596     NavigableMap map = dmap5();
597 jsr166 1.7 map.clear();
598     assertEquals(map.size(), 0);
599 dl 1.3 }
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 jsr166 1.7 map1.clear();
611 dl 1.3 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 jsr166 1.7 assertTrue(map.containsKey(m1));
621 dl 1.3 assertFalse(map.containsKey(zero));
622     }
623    
624     /**
625     * containsValue returns true for held values
626     */
627     public void testDescendingContainsValue() {
628     NavigableMap map = dmap5();
629 jsr166 1.7 assertTrue(map.containsValue("A"));
630 dl 1.3 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 jsr166 1.7 assertEquals("A", (String)map.get(m1));
640 dl 1.3 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 jsr166 1.7 assertTrue(empty.isEmpty());
651 dl 1.3 assertFalse(map.isEmpty());
652     }
653    
654     /**
655     * firstKey returns first key
656     */
657     public void testDescendingFirstKey() {
658     NavigableMap map = dmap5();
659 jsr166 1.7 assertEquals(m1, map.firstKey());
660 dl 1.3 }
661    
662     /**
663     * lastKey returns last key
664     */
665     public void testDescendingLastKey() {
666     NavigableMap map = dmap5();
667 jsr166 1.7 assertEquals(m5, map.lastKey());
668 dl 1.3 }
669    
670    
671     /**
672     * keySet returns a Set containing all the keys
673     */
674     public void testDescendingKeySet() {
675     NavigableMap map = dmap5();
676 jsr166 1.7 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 dl 1.3 }
684    
685     /**
686     * keySet is ordered
687     */
688     public void testDescendingKeySetOrder() {
689     NavigableMap map = dmap5();
690 jsr166 1.7 Set s = map.keySet();
691 dl 1.3 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 jsr166 1.7 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 dl 1.3 }
714    
715     /**
716     * keySet.toArray returns contains all keys
717     */
718     public void testDescendingAscendingKeySetToArray() {
719     NavigableMap map = dmap5();
720 jsr166 1.7 Set s = map.keySet();
721 dl 1.3 Object[] ar = s.toArray();
722     assertTrue(s.containsAll(Arrays.asList(ar)));
723 jsr166 1.7 assertEquals(5, ar.length);
724 dl 1.3 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 jsr166 1.7 Set s = map.descendingKeySet();
734 dl 1.3 Object[] ar = s.toArray();
735 jsr166 1.7 assertEquals(5, ar.length);
736 dl 1.3 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 jsr166 1.7 Collection v = map.values();
747 dl 1.3 Object[] ar = v.toArray();
748     ArrayList s = new ArrayList(Arrays.asList(ar));
749 jsr166 1.7 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 dl 1.3 }
756    
757    
758     /**
759     * entrySet contains all pairs
760     */
761     public void testDescendingEntrySet() {
762     NavigableMap map = dmap5();
763 jsr166 1.7 Set s = map.entrySet();
764     assertEquals(5, s.size());
765 dl 1.3 Iterator it = s.iterator();
766     while (it.hasNext()) {
767     Map.Entry e = (Map.Entry) it.next();
768 jsr166 1.4 assertTrue(
769 dl 1.3 (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 jsr166 1.7 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 dl 1.3 }
791    
792    
793     /**
794     * remove removes the correct key-value pair from the map
795     */
796     public void testDescendingRemove() {
797     NavigableMap map = dmap5();
798 jsr166 1.7 map.remove(m5);
799     assertEquals(4, map.size());
800     assertFalse(map.containsKey(m5));
801 dl 1.3 }
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 jsr166 1.7 assertEquals(0, empty.size());
942     assertEquals(5, map.size());
943 dl 1.3 }
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 jsr166 1.4 }
955 dl 1.3
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 jsr166 1.6 } catch (NullPointerException e) {}
967 dl 1.3 }
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 jsr166 1.6 } catch (NullPointerException e) {}
978 dl 1.3 }
979    
980     /**
981     * A deserialized map equals original
982     */
983 jsr166 1.8 public void testDescendingSerialization() throws Exception {
984 dl 1.3 NavigableMap q = dmap5();
985 jsr166 1.4
986 jsr166 1.8 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 dl 1.3 }
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 jsr166 1.4
1135 dl 1.1 }