ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubMapTest.java
Revision: 1.5
Committed: Mon Nov 16 04:57:10 2009 UTC (14 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.4: +8 -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.4 junit.textui.TestRunner.run (suite());
15 dl 1.1 }
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 jsr166 1.4 private static NavigableMap map5() {
24 dl 1.1 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 dl 1.3 return map.subMap(one, true, seven, false);
36 dl 1.1 }
37    
38 jsr166 1.4 private static NavigableMap map0() {
39 dl 1.1 TreeMap map = new TreeMap();
40     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 dl 1.3 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 jsr166 1.4 private static NavigableMap dmap0() {
61 dl 1.3 TreeMap map = new TreeMap();
62     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     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 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     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 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.5 } 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.5 } 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.5 } 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.5 } catch (NullPointerException e){}
433 dl 1.1 }
434    
435     /**
436     * A deserialized map equals original
437     */
438     public void testSerialization() {
439     NavigableMap q = map5();
440    
441     try {
442     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
443     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
444     out.writeObject(q);
445     out.close();
446    
447     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
448     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
449     NavigableMap r = (NavigableMap)in.readObject();
450     assertFalse(r.isEmpty());
451     assertEquals(q.size(), r.size());
452     assertTrue(q.equals(r));
453     assertTrue(r.equals(q));
454 jsr166 1.5 } catch (Exception e){
455 dl 1.1 e.printStackTrace();
456     unexpectedException();
457     }
458     }
459    
460    
461    
462     /**
463     * subMap returns map with keys in requested range
464     */
465     public void testSubMapContents() {
466     NavigableMap map = map5();
467     SortedMap sm = map.subMap(two, four);
468     assertEquals(two, sm.firstKey());
469     assertEquals(three, sm.lastKey());
470     assertEquals(2, sm.size());
471     assertFalse(sm.containsKey(one));
472     assertTrue(sm.containsKey(two));
473     assertTrue(sm.containsKey(three));
474     assertFalse(sm.containsKey(four));
475     assertFalse(sm.containsKey(five));
476     Iterator i = sm.keySet().iterator();
477     Object k;
478     k = (Integer)(i.next());
479     assertEquals(two, k);
480     k = (Integer)(i.next());
481     assertEquals(three, k);
482     assertFalse(i.hasNext());
483     Iterator j = sm.keySet().iterator();
484     j.next();
485     j.remove();
486     assertFalse(map.containsKey(two));
487     assertEquals(4, map.size());
488     assertEquals(1, sm.size());
489     assertEquals(three, sm.firstKey());
490     assertEquals(three, sm.lastKey());
491     assertTrue(sm.remove(three) != null);
492     assertTrue(sm.isEmpty());
493     assertEquals(3, map.size());
494     }
495    
496     public void testSubMapContents2() {
497     NavigableMap map = map5();
498     SortedMap sm = map.subMap(two, three);
499     assertEquals(1, sm.size());
500     assertEquals(two, sm.firstKey());
501     assertEquals(two, sm.lastKey());
502     assertFalse(sm.containsKey(one));
503     assertTrue(sm.containsKey(two));
504     assertFalse(sm.containsKey(three));
505     assertFalse(sm.containsKey(four));
506     assertFalse(sm.containsKey(five));
507     Iterator i = sm.keySet().iterator();
508     Object k;
509     k = (Integer)(i.next());
510     assertEquals(two, k);
511     assertFalse(i.hasNext());
512     Iterator j = sm.keySet().iterator();
513     j.next();
514     j.remove();
515     assertFalse(map.containsKey(two));
516     assertEquals(4, map.size());
517     assertEquals(0, sm.size());
518     assertTrue(sm.isEmpty());
519     assertTrue(sm.remove(three) == null);
520     assertEquals(4, map.size());
521     }
522    
523     /**
524     * headMap returns map with keys in requested range
525     */
526     public void testHeadMapContents() {
527     NavigableMap map = map5();
528     SortedMap sm = map.headMap(four);
529     assertTrue(sm.containsKey(one));
530     assertTrue(sm.containsKey(two));
531     assertTrue(sm.containsKey(three));
532     assertFalse(sm.containsKey(four));
533     assertFalse(sm.containsKey(five));
534     Iterator i = sm.keySet().iterator();
535     Object k;
536     k = (Integer)(i.next());
537     assertEquals(one, k);
538     k = (Integer)(i.next());
539     assertEquals(two, k);
540     k = (Integer)(i.next());
541     assertEquals(three, k);
542     assertFalse(i.hasNext());
543     sm.clear();
544     assertTrue(sm.isEmpty());
545     assertEquals(2, map.size());
546     assertEquals(four, map.firstKey());
547     }
548    
549     /**
550     * headMap returns map with keys in requested range
551     */
552     public void testTailMapContents() {
553     NavigableMap map = map5();
554     SortedMap sm = map.tailMap(two);
555     assertFalse(sm.containsKey(one));
556     assertTrue(sm.containsKey(two));
557     assertTrue(sm.containsKey(three));
558     assertTrue(sm.containsKey(four));
559     assertTrue(sm.containsKey(five));
560     Iterator i = sm.keySet().iterator();
561     Object k;
562     k = (Integer)(i.next());
563     assertEquals(two, k);
564     k = (Integer)(i.next());
565     assertEquals(three, k);
566     k = (Integer)(i.next());
567     assertEquals(four, k);
568     k = (Integer)(i.next());
569     assertEquals(five, k);
570     assertFalse(i.hasNext());
571    
572     Iterator ei = sm.entrySet().iterator();
573     Map.Entry e;
574     e = (Map.Entry)(ei.next());
575     assertEquals(two, e.getKey());
576     assertEquals("B", e.getValue());
577     e = (Map.Entry)(ei.next());
578     assertEquals(three, e.getKey());
579     assertEquals("C", e.getValue());
580     e = (Map.Entry)(ei.next());
581     assertEquals(four, e.getKey());
582     assertEquals("D", e.getValue());
583     e = (Map.Entry)(ei.next());
584     assertEquals(five, e.getKey());
585     assertEquals("E", e.getValue());
586     assertFalse(i.hasNext());
587    
588     SortedMap ssm = sm.tailMap(four);
589     assertEquals(four, ssm.firstKey());
590     assertEquals(five, ssm.lastKey());
591     assertTrue(ssm.remove(four) != null);
592     assertEquals(1, ssm.size());
593     assertEquals(3, sm.size());
594     assertEquals(4, map.size());
595     }
596 dl 1.3
597     /**
598     * clear removes all pairs
599     */
600     public void testDescendingClear() {
601     NavigableMap map = dmap5();
602     map.clear();
603     assertEquals(map.size(), 0);
604     }
605    
606    
607     /**
608     * Maps with same contents are equal
609     */
610     public void testDescendingEquals() {
611     NavigableMap map1 = dmap5();
612     NavigableMap map2 = dmap5();
613     assertEquals(map1, map2);
614     assertEquals(map2, map1);
615     map1.clear();
616     assertFalse(map1.equals(map2));
617     assertFalse(map2.equals(map1));
618     }
619    
620     /**
621     * containsKey returns true for contained key
622     */
623     public void testDescendingContainsKey() {
624     NavigableMap map = dmap5();
625     assertTrue(map.containsKey(m1));
626     assertFalse(map.containsKey(zero));
627     }
628    
629     /**
630     * containsValue returns true for held values
631     */
632     public void testDescendingContainsValue() {
633     NavigableMap map = dmap5();
634     assertTrue(map.containsValue("A"));
635     assertFalse(map.containsValue("Z"));
636     }
637    
638     /**
639     * get returns the correct element at the given key,
640     * or null if not present
641     */
642     public void testDescendingGet() {
643     NavigableMap map = dmap5();
644     assertEquals("A", (String)map.get(m1));
645     NavigableMap empty = dmap0();
646     assertNull(empty.get(m1));
647     }
648    
649     /**
650     * isEmpty is true of empty map and false for non-empty
651     */
652     public void testDescendingIsEmpty() {
653     NavigableMap empty = dmap0();
654     NavigableMap map = dmap5();
655     assertTrue(empty.isEmpty());
656     assertFalse(map.isEmpty());
657     }
658    
659     /**
660     * firstKey returns first key
661     */
662     public void testDescendingFirstKey() {
663     NavigableMap map = dmap5();
664     assertEquals(m1, map.firstKey());
665     }
666    
667     /**
668     * lastKey returns last key
669     */
670     public void testDescendingLastKey() {
671     NavigableMap map = dmap5();
672     assertEquals(m5, map.lastKey());
673     }
674    
675    
676     /**
677     * keySet returns a Set containing all the keys
678     */
679     public void testDescendingKeySet() {
680     NavigableMap map = dmap5();
681     Set s = map.keySet();
682     assertEquals(5, s.size());
683     assertTrue(s.contains(m1));
684     assertTrue(s.contains(m2));
685     assertTrue(s.contains(m3));
686     assertTrue(s.contains(m4));
687     assertTrue(s.contains(m5));
688     }
689    
690     /**
691     * keySet is ordered
692     */
693     public void testDescendingKeySetOrder() {
694     NavigableMap map = dmap5();
695     Set s = map.keySet();
696     Iterator i = s.iterator();
697     Integer last = (Integer)i.next();
698     assertEquals(last, m1);
699     while (i.hasNext()) {
700     Integer k = (Integer)i.next();
701     assertTrue(last.compareTo(k) > 0);
702     last = k;
703     }
704     }
705    
706     /**
707     * values collection contains all values
708     */
709     public void testDescendingValues() {
710     NavigableMap map = dmap5();
711     Collection s = map.values();
712     assertEquals(5, s.size());
713     assertTrue(s.contains("A"));
714     assertTrue(s.contains("B"));
715     assertTrue(s.contains("C"));
716     assertTrue(s.contains("D"));
717     assertTrue(s.contains("E"));
718     }
719    
720     /**
721     * keySet.toArray returns contains all keys
722     */
723     public void testDescendingAscendingKeySetToArray() {
724     NavigableMap map = dmap5();
725     Set s = map.keySet();
726     Object[] ar = s.toArray();
727     assertTrue(s.containsAll(Arrays.asList(ar)));
728     assertEquals(5, ar.length);
729     ar[0] = m10;
730     assertFalse(s.containsAll(Arrays.asList(ar)));
731     }
732    
733     /**
734     * descendingkeySet.toArray returns contains all keys
735     */
736     public void testDescendingDescendingKeySetToArray() {
737     NavigableMap map = dmap5();
738     Set s = map.descendingKeySet();
739     Object[] ar = s.toArray();
740     assertEquals(5, ar.length);
741     assertTrue(s.containsAll(Arrays.asList(ar)));
742     ar[0] = m10;
743     assertFalse(s.containsAll(Arrays.asList(ar)));
744     }
745    
746     /**
747     * Values.toArray contains all values
748     */
749     public void testDescendingValuesToArray() {
750     NavigableMap map = dmap5();
751     Collection v = map.values();
752     Object[] ar = v.toArray();
753     ArrayList s = new ArrayList(Arrays.asList(ar));
754     assertEquals(5, ar.length);
755     assertTrue(s.contains("A"));
756     assertTrue(s.contains("B"));
757     assertTrue(s.contains("C"));
758     assertTrue(s.contains("D"));
759     assertTrue(s.contains("E"));
760     }
761    
762    
763     /**
764     * entrySet contains all pairs
765     */
766     public void testDescendingEntrySet() {
767     NavigableMap map = dmap5();
768     Set s = map.entrySet();
769     assertEquals(5, s.size());
770     Iterator it = s.iterator();
771     while (it.hasNext()) {
772     Map.Entry e = (Map.Entry) it.next();
773 jsr166 1.4 assertTrue(
774 dl 1.3 (e.getKey().equals(m1) && e.getValue().equals("A")) ||
775     (e.getKey().equals(m2) && e.getValue().equals("B")) ||
776     (e.getKey().equals(m3) && e.getValue().equals("C")) ||
777     (e.getKey().equals(m4) && e.getValue().equals("D")) ||
778     (e.getKey().equals(m5) && e.getValue().equals("E")));
779     }
780     }
781    
782     /**
783     * putAll adds all key-value pairs from the given map
784     */
785     public void testDescendingPutAll() {
786     NavigableMap empty = dmap0();
787     NavigableMap map = dmap5();
788     empty.putAll(map);
789     assertEquals(5, empty.size());
790     assertTrue(empty.containsKey(m1));
791     assertTrue(empty.containsKey(m2));
792     assertTrue(empty.containsKey(m3));
793     assertTrue(empty.containsKey(m4));
794     assertTrue(empty.containsKey(m5));
795     }
796    
797    
798     /**
799     * remove removes the correct key-value pair from the map
800     */
801     public void testDescendingRemove() {
802     NavigableMap map = dmap5();
803     map.remove(m5);
804     assertEquals(4, map.size());
805     assertFalse(map.containsKey(m5));
806     }
807    
808     /**
809     * lowerEntry returns preceding entry.
810     */
811     public void testDescendingLowerEntry() {
812     NavigableMap map = dmap5();
813     Map.Entry e1 = map.lowerEntry(m3);
814     assertEquals(m2, e1.getKey());
815    
816     Map.Entry e2 = map.lowerEntry(m6);
817     assertEquals(m5, e2.getKey());
818    
819     Map.Entry e3 = map.lowerEntry(m1);
820     assertNull(e3);
821    
822     Map.Entry e4 = map.lowerEntry(zero);
823     assertNull(e4);
824    
825     }
826    
827     /**
828     * higherEntry returns next entry.
829     */
830     public void testDescendingHigherEntry() {
831     NavigableMap map = dmap5();
832     Map.Entry e1 = map.higherEntry(m3);
833     assertEquals(m4, e1.getKey());
834    
835     Map.Entry e2 = map.higherEntry(zero);
836     assertEquals(m1, e2.getKey());
837    
838     Map.Entry e3 = map.higherEntry(m5);
839     assertNull(e3);
840    
841     Map.Entry e4 = map.higherEntry(m6);
842     assertNull(e4);
843    
844     }
845    
846     /**
847     * floorEntry returns preceding entry.
848     */
849     public void testDescendingFloorEntry() {
850     NavigableMap map = dmap5();
851     Map.Entry e1 = map.floorEntry(m3);
852     assertEquals(m3, e1.getKey());
853    
854     Map.Entry e2 = map.floorEntry(m6);
855     assertEquals(m5, e2.getKey());
856    
857     Map.Entry e3 = map.floorEntry(m1);
858     assertEquals(m1, e3.getKey());
859    
860     Map.Entry e4 = map.floorEntry(zero);
861     assertNull(e4);
862    
863     }
864    
865     /**
866     * ceilingEntry returns next entry.
867     */
868     public void testDescendingCeilingEntry() {
869     NavigableMap map = dmap5();
870     Map.Entry e1 = map.ceilingEntry(m3);
871     assertEquals(m3, e1.getKey());
872    
873     Map.Entry e2 = map.ceilingEntry(zero);
874     assertEquals(m1, e2.getKey());
875    
876     Map.Entry e3 = map.ceilingEntry(m5);
877     assertEquals(m5, e3.getKey());
878    
879     Map.Entry e4 = map.ceilingEntry(m6);
880     assertNull(e4);
881    
882     }
883    
884     /**
885     * pollFirstEntry returns entries in order
886     */
887     public void testDescendingPollFirstEntry() {
888     NavigableMap map = dmap5();
889     Map.Entry e = map.pollFirstEntry();
890     assertEquals(m1, e.getKey());
891     assertEquals("A", e.getValue());
892     e = map.pollFirstEntry();
893     assertEquals(m2, e.getKey());
894     map.put(m1, "A");
895     e = map.pollFirstEntry();
896     assertEquals(m1, e.getKey());
897     assertEquals("A", e.getValue());
898     e = map.pollFirstEntry();
899     assertEquals(m3, e.getKey());
900     map.remove(m4);
901     e = map.pollFirstEntry();
902     assertEquals(m5, e.getKey());
903     try {
904     e.setValue("A");
905     shouldThrow();
906     } catch (Exception ok) {
907     }
908     e = map.pollFirstEntry();
909     assertNull(e);
910     }
911    
912     /**
913     * pollLastEntry returns entries in order
914     */
915     public void testDescendingPollLastEntry() {
916     NavigableMap map = dmap5();
917     Map.Entry e = map.pollLastEntry();
918     assertEquals(m5, e.getKey());
919     assertEquals("E", e.getValue());
920     e = map.pollLastEntry();
921     assertEquals(m4, e.getKey());
922     map.put(m5, "E");
923     e = map.pollLastEntry();
924     assertEquals(m5, e.getKey());
925     assertEquals("E", e.getValue());
926     e = map.pollLastEntry();
927     assertEquals(m3, e.getKey());
928     map.remove(m2);
929     e = map.pollLastEntry();
930     assertEquals(m1, e.getKey());
931     try {
932     e.setValue("E");
933     shouldThrow();
934     } catch (Exception ok) {
935     }
936     e = map.pollLastEntry();
937     assertNull(e);
938     }
939    
940     /**
941     * size returns the correct values
942     */
943     public void testDescendingSize() {
944     NavigableMap map = dmap5();
945     NavigableMap empty = dmap0();
946     assertEquals(0, empty.size());
947     assertEquals(5, map.size());
948     }
949    
950     /**
951     * toString contains toString of elements
952     */
953     public void testDescendingToString() {
954     NavigableMap map = dmap5();
955     String s = map.toString();
956     for (int i = 1; i <= 5; ++i) {
957     assertTrue(s.indexOf(String.valueOf(i)) >= 0);
958     }
959 jsr166 1.4 }
960 dl 1.3
961     // Exception testDescendings
962    
963     /**
964     * get(null) of nonempty map throws NPE
965     */
966     public void testDescendingGet_NullPointerException() {
967     try {
968     NavigableMap c = dmap5();
969     c.get(null);
970     shouldThrow();
971 jsr166 1.5 } catch (NullPointerException e){}
972 dl 1.3 }
973    
974     /**
975     * put(null,x) throws NPE
976     */
977     public void testDescendingPut1_NullPointerException() {
978     try {
979     NavigableMap c = dmap5();
980     c.put(null, "whatever");
981     shouldThrow();
982 jsr166 1.5 } catch (NullPointerException e){}
983 dl 1.3 }
984    
985     /**
986     * A deserialized map equals original
987     */
988     public void testDescendingSerialization() {
989     NavigableMap q = dmap5();
990 jsr166 1.4
991 dl 1.3 try {
992     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
993     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
994     out.writeObject(q);
995     out.close();
996    
997     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
998     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
999     NavigableMap r = (NavigableMap)in.readObject();
1000     assertEquals(q.size(), r.size());
1001     assertTrue(q.equals(r));
1002     assertTrue(r.equals(q));
1003 jsr166 1.5 } catch (Exception e){
1004 dl 1.3 e.printStackTrace();
1005     unexpectedException();
1006     }
1007     }
1008    
1009    
1010    
1011     /**
1012     * subMap returns map with keys in requested range
1013     */
1014     public void testDescendingSubMapContents() {
1015     NavigableMap map = dmap5();
1016     SortedMap sm = map.subMap(m2, m4);
1017     assertEquals(m2, sm.firstKey());
1018     assertEquals(m3, sm.lastKey());
1019     assertEquals(2, sm.size());
1020     assertFalse(sm.containsKey(m1));
1021     assertTrue(sm.containsKey(m2));
1022     assertTrue(sm.containsKey(m3));
1023     assertFalse(sm.containsKey(m4));
1024     assertFalse(sm.containsKey(m5));
1025     Iterator i = sm.keySet().iterator();
1026     Object k;
1027     k = (Integer)(i.next());
1028     assertEquals(m2, k);
1029     k = (Integer)(i.next());
1030     assertEquals(m3, k);
1031     assertFalse(i.hasNext());
1032     Iterator j = sm.keySet().iterator();
1033     j.next();
1034     j.remove();
1035     assertFalse(map.containsKey(m2));
1036     assertEquals(4, map.size());
1037     assertEquals(1, sm.size());
1038     assertEquals(m3, sm.firstKey());
1039     assertEquals(m3, sm.lastKey());
1040     assertTrue(sm.remove(m3) != null);
1041     assertTrue(sm.isEmpty());
1042     assertEquals(3, map.size());
1043     }
1044    
1045     public void testDescendingSubMapContents2() {
1046     NavigableMap map = dmap5();
1047     SortedMap sm = map.subMap(m2, m3);
1048     assertEquals(1, sm.size());
1049     assertEquals(m2, sm.firstKey());
1050     assertEquals(m2, sm.lastKey());
1051     assertFalse(sm.containsKey(m1));
1052     assertTrue(sm.containsKey(m2));
1053     assertFalse(sm.containsKey(m3));
1054     assertFalse(sm.containsKey(m4));
1055     assertFalse(sm.containsKey(m5));
1056     Iterator i = sm.keySet().iterator();
1057     Object k;
1058     k = (Integer)(i.next());
1059     assertEquals(m2, k);
1060     assertFalse(i.hasNext());
1061     Iterator j = sm.keySet().iterator();
1062     j.next();
1063     j.remove();
1064     assertFalse(map.containsKey(m2));
1065     assertEquals(4, map.size());
1066     assertEquals(0, sm.size());
1067     assertTrue(sm.isEmpty());
1068     assertTrue(sm.remove(m3) == null);
1069     assertEquals(4, map.size());
1070     }
1071    
1072     /**
1073     * headMap returns map with keys in requested range
1074     */
1075     public void testDescendingHeadMapContents() {
1076     NavigableMap map = dmap5();
1077     SortedMap sm = map.headMap(m4);
1078     assertTrue(sm.containsKey(m1));
1079     assertTrue(sm.containsKey(m2));
1080     assertTrue(sm.containsKey(m3));
1081     assertFalse(sm.containsKey(m4));
1082     assertFalse(sm.containsKey(m5));
1083     Iterator i = sm.keySet().iterator();
1084     Object k;
1085     k = (Integer)(i.next());
1086     assertEquals(m1, k);
1087     k = (Integer)(i.next());
1088     assertEquals(m2, k);
1089     k = (Integer)(i.next());
1090     assertEquals(m3, k);
1091     assertFalse(i.hasNext());
1092     sm.clear();
1093     assertTrue(sm.isEmpty());
1094     assertEquals(2, map.size());
1095     assertEquals(m4, map.firstKey());
1096     }
1097    
1098     /**
1099     * headMap returns map with keys in requested range
1100     */
1101     public void testDescendingTailMapContents() {
1102     NavigableMap map = dmap5();
1103     SortedMap sm = map.tailMap(m2);
1104     assertFalse(sm.containsKey(m1));
1105     assertTrue(sm.containsKey(m2));
1106     assertTrue(sm.containsKey(m3));
1107     assertTrue(sm.containsKey(m4));
1108     assertTrue(sm.containsKey(m5));
1109     Iterator i = sm.keySet().iterator();
1110     Object k;
1111     k = (Integer)(i.next());
1112     assertEquals(m2, k);
1113     k = (Integer)(i.next());
1114     assertEquals(m3, k);
1115     k = (Integer)(i.next());
1116     assertEquals(m4, k);
1117     k = (Integer)(i.next());
1118     assertEquals(m5, k);
1119     assertFalse(i.hasNext());
1120    
1121     Iterator ei = sm.entrySet().iterator();
1122     Map.Entry e;
1123     e = (Map.Entry)(ei.next());
1124     assertEquals(m2, e.getKey());
1125     assertEquals("B", e.getValue());
1126     e = (Map.Entry)(ei.next());
1127     assertEquals(m3, e.getKey());
1128     assertEquals("C", e.getValue());
1129     e = (Map.Entry)(ei.next());
1130     assertEquals(m4, e.getKey());
1131     assertEquals("D", e.getValue());
1132     e = (Map.Entry)(ei.next());
1133     assertEquals(m5, e.getKey());
1134     assertEquals("E", e.getValue());
1135     assertFalse(i.hasNext());
1136    
1137     SortedMap ssm = sm.tailMap(m4);
1138     assertEquals(m4, ssm.firstKey());
1139     assertEquals(m5, ssm.lastKey());
1140     assertTrue(ssm.remove(m4) != null);
1141     assertEquals(1, ssm.size());
1142     assertEquals(3, sm.size());
1143     assertEquals(4, map.size());
1144     }
1145 jsr166 1.4
1146 dl 1.1 }