ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubMapTest.java
Revision: 1.11
Committed: Tue Dec 1 09:44:58 2009 UTC (14 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.10: +0 -8 lines
Log Message:
whitespace

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