ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.10
Committed: Sun Nov 22 18:57:17 2009 UTC (14 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.9: +11 -15 lines
Log Message:
use autoboxing judiciously for readability

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 TreeSubSetTest extends JSR166TestCase {
13     public static void main(String[] args) {
14 jsr166 1.8 junit.textui.TestRunner.run (suite());
15 dl 1.1 }
16     public static Test suite() {
17 jsr166 1.8 return new TestSuite(TreeSubSetTest.class);
18 dl 1.1 }
19    
20 jsr166 1.4 static class MyReverseComparator implements Comparator {
21 dl 1.1 public int compare(Object x, Object y) {
22 jsr166 1.10 return ((Comparable)y).compareTo(x);
23 dl 1.1 }
24     }
25    
26     /**
27     * Create a set of given size containing consecutive
28     * Integers 0 ... n.
29     */
30     private NavigableSet populatedSet(int n) {
31     TreeSet q = new TreeSet();
32     assertTrue(q.isEmpty());
33    
34 jsr166 1.8 for (int i = n-1; i >= 0; i-=2)
35     assertTrue(q.add(new Integer(i)));
36     for (int i = (n & 1); i < n; i+=2)
37     assertTrue(q.add(new Integer(i)));
38 dl 1.1 assertTrue(q.add(new Integer(-n)));
39     assertTrue(q.add(new Integer(n)));
40 dl 1.3 NavigableSet s = q.subSet(new Integer(0), true, new Integer(n), false);
41 dl 1.1 assertFalse(s.isEmpty());
42 jsr166 1.8 assertEquals(n, s.size());
43 dl 1.1 return s;
44     }
45    
46     /**
47     * Create set of first 5 ints
48     */
49     private NavigableSet set5() {
50     TreeSet q = new TreeSet();
51     assertTrue(q.isEmpty());
52     q.add(one);
53     q.add(two);
54     q.add(three);
55     q.add(four);
56     q.add(five);
57     q.add(zero);
58     q.add(seven);
59 dl 1.3 NavigableSet s = q.subSet(one, true, seven, false);
60 jsr166 1.8 assertEquals(5, s.size());
61 dl 1.3 return s;
62     }
63    
64     private NavigableSet dset5() {
65     TreeSet q = new TreeSet();
66     assertTrue(q.isEmpty());
67     q.add(m1);
68     q.add(m2);
69     q.add(m3);
70     q.add(m4);
71     q.add(m5);
72     NavigableSet s = q.descendingSet();
73 jsr166 1.8 assertEquals(5, s.size());
74 dl 1.1 return s;
75     }
76    
77 jsr166 1.4 private static NavigableSet set0() {
78 jsr166 1.8 TreeSet set = new TreeSet();
79 dl 1.1 assertTrue(set.isEmpty());
80 dl 1.3 return set.tailSet(m1, false);
81     }
82    
83 jsr166 1.4 private static NavigableSet dset0() {
84 jsr166 1.8 TreeSet set = new TreeSet();
85 dl 1.3 assertTrue(set.isEmpty());
86     return set;
87 dl 1.1 }
88 jsr166 1.4
89 dl 1.1 /**
90     * A new set has unbounded capacity
91     */
92     public void testConstructor1() {
93     assertEquals(0, set0().size());
94     }
95    
96    
97     /**
98     * isEmpty is true before add, false after
99     */
100     public void testEmpty() {
101     NavigableSet q = set0();
102     assertTrue(q.isEmpty());
103 jsr166 1.10 assertTrue(q.add(new Integer(1)));
104 dl 1.1 assertFalse(q.isEmpty());
105 jsr166 1.10 assertTrue(q.add(new Integer(2)));
106 dl 1.1 q.pollFirst();
107     q.pollFirst();
108     assertTrue(q.isEmpty());
109     }
110    
111     /**
112     * size changes when elements added and removed
113     */
114     public void testSize() {
115     NavigableSet q = populatedSet(SIZE);
116     for (int i = 0; i < SIZE; ++i) {
117     assertEquals(SIZE-i, q.size());
118     q.pollFirst();
119     }
120     for (int i = 0; i < SIZE; ++i) {
121     assertEquals(i, q.size());
122     q.add(new Integer(i));
123     }
124     }
125    
126     /**
127     * add(null) throws NPE
128     */
129     public void testAddNull() {
130 jsr166 1.8 try {
131 dl 1.1 NavigableSet q = set0();
132     q.add(null);
133     shouldThrow();
134 jsr166 1.7 } catch (NullPointerException success) {}
135 dl 1.1 }
136    
137     /**
138     * Add of comparable element succeeds
139     */
140     public void testAdd() {
141     NavigableSet q = set0();
142     assertTrue(q.add(six));
143     }
144    
145     /**
146     * Add of duplicate element fails
147     */
148     public void testAddDup() {
149     NavigableSet q = set0();
150     assertTrue(q.add(six));
151     assertFalse(q.add(six));
152     }
153    
154     /**
155     * Add of non-Comparable throws CCE
156     */
157     public void testAddNonComparable() {
158     try {
159     NavigableSet q = set0();
160     q.add(new Object());
161     q.add(new Object());
162     q.add(new Object());
163     shouldThrow();
164 jsr166 1.7 } catch (ClassCastException success) {}
165 dl 1.1 }
166    
167    
168     /**
169     * addAll(null) throws NPE
170     */
171     public void testAddAll1() {
172     try {
173     NavigableSet q = set0();
174     q.addAll(null);
175     shouldThrow();
176 jsr166 1.7 } catch (NullPointerException success) {}
177 dl 1.1 }
178     /**
179     * addAll of a collection with null elements throws NPE
180     */
181     public void testAddAll2() {
182     try {
183     NavigableSet q = set0();
184     Integer[] ints = new Integer[SIZE];
185     q.addAll(Arrays.asList(ints));
186     shouldThrow();
187 jsr166 1.7 } catch (NullPointerException success) {}
188 dl 1.1 }
189     /**
190     * addAll of a collection with any null elements throws NPE after
191     * possibly adding some elements
192     */
193     public void testAddAll3() {
194     try {
195     NavigableSet q = set0();
196     Integer[] ints = new Integer[SIZE];
197     for (int i = 0; i < SIZE-1; ++i)
198     ints[i] = new Integer(i+SIZE);
199     q.addAll(Arrays.asList(ints));
200     shouldThrow();
201 jsr166 1.7 } catch (NullPointerException success) {}
202 dl 1.1 }
203    
204     /**
205     * Set contains all elements of successful addAll
206     */
207     public void testAddAll5() {
208 jsr166 1.9 Integer[] empty = new Integer[0];
209     Integer[] ints = new Integer[SIZE];
210     for (int i = 0; i < SIZE; ++i)
211     ints[i] = new Integer(SIZE-1- i);
212     NavigableSet q = set0();
213     assertFalse(q.addAll(Arrays.asList(empty)));
214     assertTrue(q.addAll(Arrays.asList(ints)));
215     for (int i = 0; i < SIZE; ++i)
216     assertEquals(new Integer(i), q.pollFirst());
217 dl 1.1 }
218    
219     /**
220     * poll succeeds unless empty
221     */
222     public void testPoll() {
223     NavigableSet q = populatedSet(SIZE);
224     for (int i = 0; i < SIZE; ++i) {
225 jsr166 1.10 assertEquals(i, q.pollFirst());
226 dl 1.1 }
227 jsr166 1.8 assertNull(q.pollFirst());
228 dl 1.1 }
229    
230     /**
231     * remove(x) removes x and returns true if present
232     */
233     public void testRemoveElement() {
234     NavigableSet q = populatedSet(SIZE);
235     for (int i = 1; i < SIZE; i+=2) {
236     assertTrue(q.remove(new Integer(i)));
237     }
238     for (int i = 0; i < SIZE; i+=2) {
239     assertTrue(q.remove(new Integer(i)));
240     assertFalse(q.remove(new Integer(i+1)));
241     }
242     assertTrue(q.isEmpty());
243     }
244 jsr166 1.4
245 dl 1.1 /**
246     * contains(x) reports true when elements added but not yet removed
247     */
248     public void testContains() {
249     NavigableSet q = populatedSet(SIZE);
250     for (int i = 0; i < SIZE; ++i) {
251     assertTrue(q.contains(new Integer(i)));
252     q.pollFirst();
253     assertFalse(q.contains(new Integer(i)));
254     }
255     }
256    
257     /**
258     * clear removes all elements
259     */
260     public void testClear() {
261     NavigableSet q = populatedSet(SIZE);
262     q.clear();
263     assertTrue(q.isEmpty());
264     assertEquals(0, q.size());
265 jsr166 1.10 assertTrue(q.add(new Integer(1)));
266 dl 1.1 assertFalse(q.isEmpty());
267     q.clear();
268     assertTrue(q.isEmpty());
269     }
270    
271     /**
272     * containsAll(c) is true when c contains a subset of elements
273     */
274     public void testContainsAll() {
275     NavigableSet q = populatedSet(SIZE);
276     NavigableSet p = set0();
277     for (int i = 0; i < SIZE; ++i) {
278     assertTrue(q.containsAll(p));
279     assertFalse(p.containsAll(q));
280     p.add(new Integer(i));
281     }
282     assertTrue(p.containsAll(q));
283     }
284    
285     /**
286     * retainAll(c) retains only those elements of c and reports true if changed
287     */
288     public void testRetainAll() {
289     NavigableSet q = populatedSet(SIZE);
290     NavigableSet p = populatedSet(SIZE);
291     for (int i = 0; i < SIZE; ++i) {
292     boolean changed = q.retainAll(p);
293     if (i == 0)
294     assertFalse(changed);
295     else
296     assertTrue(changed);
297    
298     assertTrue(q.containsAll(p));
299     assertEquals(SIZE-i, q.size());
300     p.pollFirst();
301     }
302     }
303    
304     /**
305     * removeAll(c) removes only those elements of c and reports true if changed
306     */
307     public void testRemoveAll() {
308     for (int i = 1; i < SIZE; ++i) {
309     NavigableSet q = populatedSet(SIZE);
310     NavigableSet p = populatedSet(i);
311     assertTrue(q.removeAll(p));
312     assertEquals(SIZE-i, q.size());
313     for (int j = 0; j < i; ++j) {
314     Integer I = (Integer)(p.pollFirst());
315     assertFalse(q.contains(I));
316     }
317     }
318     }
319    
320 jsr166 1.4
321 dl 1.1
322     /**
323     * lower returns preceding element
324     */
325     public void testLower() {
326     NavigableSet q = set5();
327     Object e1 = q.lower(three);
328     assertEquals(two, e1);
329    
330     Object e2 = q.lower(six);
331     assertEquals(five, e2);
332    
333     Object e3 = q.lower(one);
334     assertNull(e3);
335    
336     Object e4 = q.lower(zero);
337     assertNull(e4);
338    
339     }
340    
341     /**
342     * higher returns next element
343     */
344     public void testHigher() {
345     NavigableSet q = set5();
346     Object e1 = q.higher(three);
347     assertEquals(four, e1);
348    
349     Object e2 = q.higher(zero);
350     assertEquals(one, e2);
351    
352     Object e3 = q.higher(five);
353     assertNull(e3);
354    
355     Object e4 = q.higher(six);
356     assertNull(e4);
357    
358     }
359    
360     /**
361     * floor returns preceding element
362     */
363     public void testFloor() {
364     NavigableSet q = set5();
365     Object e1 = q.floor(three);
366     assertEquals(three, e1);
367    
368     Object e2 = q.floor(six);
369     assertEquals(five, e2);
370    
371     Object e3 = q.floor(one);
372     assertEquals(one, e3);
373    
374     Object e4 = q.floor(zero);
375     assertNull(e4);
376    
377     }
378    
379     /**
380     * ceiling returns next element
381     */
382     public void testCeiling() {
383     NavigableSet q = set5();
384     Object e1 = q.ceiling(three);
385     assertEquals(three, e1);
386    
387     Object e2 = q.ceiling(zero);
388     assertEquals(one, e2);
389    
390     Object e3 = q.ceiling(five);
391     assertEquals(five, e3);
392    
393     Object e4 = q.ceiling(six);
394     assertNull(e4);
395    
396     }
397    
398     /**
399     * toArray contains all elements
400     */
401     public void testToArray() {
402     NavigableSet q = populatedSet(SIZE);
403 jsr166 1.8 Object[] o = q.toArray();
404 dl 1.1 Arrays.sort(o);
405 jsr166 1.8 for (int i = 0; i < o.length; i++)
406     assertEquals(o[i], q.pollFirst());
407 dl 1.1 }
408    
409     /**
410     * toArray(a) contains all elements
411     */
412     public void testToArray2() {
413     NavigableSet q = populatedSet(SIZE);
414 jsr166 1.8 Integer[] ints = new Integer[SIZE];
415     ints = (Integer[])q.toArray(ints);
416 dl 1.1 Arrays.sort(ints);
417 jsr166 1.5 for (int i = 0; i < ints.length; i++)
418 dl 1.1 assertEquals(ints[i], q.pollFirst());
419     }
420 jsr166 1.4
421 dl 1.1 /**
422     * iterator iterates through all elements
423     */
424     public void testIterator() {
425     NavigableSet q = populatedSet(SIZE);
426     int i = 0;
427 jsr166 1.8 Iterator it = q.iterator();
428 jsr166 1.5 while (it.hasNext()) {
429 dl 1.1 assertTrue(q.contains(it.next()));
430     ++i;
431     }
432     assertEquals(i, SIZE);
433     }
434    
435     /**
436     * iterator of empty set has no elements
437     */
438     public void testEmptyIterator() {
439     NavigableSet q = set0();
440     int i = 0;
441 jsr166 1.8 Iterator it = q.iterator();
442 jsr166 1.5 while (it.hasNext()) {
443 dl 1.1 assertTrue(q.contains(it.next()));
444     ++i;
445     }
446     assertEquals(i, 0);
447     }
448    
449     /**
450     * iterator.remove removes current element
451     */
452     public void testIteratorRemove () {
453     final NavigableSet q = set0();
454     q.add(new Integer(2));
455     q.add(new Integer(1));
456     q.add(new Integer(3));
457    
458     Iterator it = q.iterator();
459     it.next();
460     it.remove();
461    
462     it = q.iterator();
463 jsr166 1.10 assertEquals(it.next(), 2);
464     assertEquals(it.next(), 3);
465 dl 1.1 assertFalse(it.hasNext());
466     }
467    
468    
469     /**
470     * toString contains toStrings of elements
471     */
472     public void testToString() {
473     NavigableSet q = populatedSet(SIZE);
474     String s = q.toString();
475     for (int i = 0; i < SIZE; ++i) {
476     assertTrue(s.indexOf(String.valueOf(i)) >= 0);
477     }
478 jsr166 1.4 }
479 dl 1.1
480     /**
481 jsr166 1.4 * A deserialized serialized set has same elements
482 dl 1.1 */
483 jsr166 1.7 public void testSerialization() throws Exception {
484 dl 1.1 NavigableSet q = populatedSet(SIZE);
485 jsr166 1.7 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
486     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
487     out.writeObject(q);
488     out.close();
489    
490     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
491     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
492     NavigableSet r = (NavigableSet)in.readObject();
493     assertEquals(q.size(), r.size());
494     while (!q.isEmpty())
495     assertEquals(q.pollFirst(), r.pollFirst());
496 dl 1.1 }
497    
498     /**
499     * subSet returns set with keys in requested range
500     */
501     public void testSubSetContents() {
502     NavigableSet set = set5();
503     SortedSet sm = set.subSet(two, four);
504     assertEquals(two, sm.first());
505     assertEquals(three, sm.last());
506     assertEquals(2, sm.size());
507     assertFalse(sm.contains(one));
508     assertTrue(sm.contains(two));
509     assertTrue(sm.contains(three));
510     assertFalse(sm.contains(four));
511     assertFalse(sm.contains(five));
512     Iterator i = sm.iterator();
513     Object k;
514     k = (Integer)(i.next());
515     assertEquals(two, k);
516     k = (Integer)(i.next());
517     assertEquals(three, k);
518     assertFalse(i.hasNext());
519     Iterator j = sm.iterator();
520     j.next();
521     j.remove();
522     assertFalse(set.contains(two));
523     assertEquals(4, set.size());
524     assertEquals(1, sm.size());
525     assertEquals(three, sm.first());
526     assertEquals(three, sm.last());
527     assertTrue(sm.remove(three));
528     assertTrue(sm.isEmpty());
529     assertEquals(3, set.size());
530     }
531    
532     public void testSubSetContents2() {
533     NavigableSet set = set5();
534     SortedSet sm = set.subSet(two, three);
535     assertEquals(1, sm.size());
536     assertEquals(two, sm.first());
537     assertEquals(two, sm.last());
538     assertFalse(sm.contains(one));
539     assertTrue(sm.contains(two));
540     assertFalse(sm.contains(three));
541     assertFalse(sm.contains(four));
542     assertFalse(sm.contains(five));
543     Iterator i = sm.iterator();
544     Object k;
545     k = (Integer)(i.next());
546     assertEquals(two, k);
547     assertFalse(i.hasNext());
548     Iterator j = sm.iterator();
549     j.next();
550     j.remove();
551     assertFalse(set.contains(two));
552     assertEquals(4, set.size());
553     assertEquals(0, sm.size());
554     assertTrue(sm.isEmpty());
555     assertFalse(sm.remove(three));
556     assertEquals(4, set.size());
557     }
558    
559     /**
560     * headSet returns set with keys in requested range
561     */
562     public void testHeadSetContents() {
563     NavigableSet set = set5();
564     SortedSet sm = set.headSet(four);
565     assertTrue(sm.contains(one));
566     assertTrue(sm.contains(two));
567     assertTrue(sm.contains(three));
568     assertFalse(sm.contains(four));
569     assertFalse(sm.contains(five));
570     Iterator i = sm.iterator();
571     Object k;
572     k = (Integer)(i.next());
573     assertEquals(one, k);
574     k = (Integer)(i.next());
575     assertEquals(two, k);
576     k = (Integer)(i.next());
577     assertEquals(three, k);
578     assertFalse(i.hasNext());
579     sm.clear();
580     assertTrue(sm.isEmpty());
581     assertEquals(2, set.size());
582     assertEquals(four, set.first());
583     }
584    
585     /**
586     * tailSet returns set with keys in requested range
587     */
588     public void testTailSetContents() {
589     NavigableSet set = set5();
590     SortedSet sm = set.tailSet(two);
591     assertFalse(sm.contains(one));
592     assertTrue(sm.contains(two));
593     assertTrue(sm.contains(three));
594     assertTrue(sm.contains(four));
595     assertTrue(sm.contains(five));
596     Iterator i = sm.iterator();
597     Object k;
598     k = (Integer)(i.next());
599     assertEquals(two, k);
600     k = (Integer)(i.next());
601     assertEquals(three, k);
602     k = (Integer)(i.next());
603     assertEquals(four, k);
604     k = (Integer)(i.next());
605     assertEquals(five, k);
606     assertFalse(i.hasNext());
607    
608     SortedSet ssm = sm.tailSet(four);
609     assertEquals(four, ssm.first());
610     assertEquals(five, ssm.last());
611     assertTrue(ssm.remove(four));
612     assertEquals(1, ssm.size());
613     assertEquals(3, sm.size());
614     assertEquals(4, set.size());
615     }
616    
617 dl 1.3 /**
618     * size changes when elements added and removed
619     */
620     public void testDescendingSize() {
621     NavigableSet q = populatedSet(SIZE);
622     for (int i = 0; i < SIZE; ++i) {
623     assertEquals(SIZE-i, q.size());
624     q.pollFirst();
625     }
626     for (int i = 0; i < SIZE; ++i) {
627     assertEquals(i, q.size());
628     q.add(new Integer(i));
629     }
630     }
631    
632     /**
633     * Add of comparable element succeeds
634     */
635     public void testDescendingAdd() {
636     NavigableSet q = dset0();
637     assertTrue(q.add(m6));
638     }
639    
640     /**
641     * Add of duplicate element fails
642     */
643     public void testDescendingAddDup() {
644     NavigableSet q = dset0();
645     assertTrue(q.add(m6));
646     assertFalse(q.add(m6));
647     }
648    
649     /**
650     * Add of non-Comparable throws CCE
651     */
652     public void testDescendingAddNonComparable() {
653     try {
654     NavigableSet q = dset0();
655     q.add(new Object());
656     q.add(new Object());
657     q.add(new Object());
658     shouldThrow();
659 jsr166 1.7 } catch (ClassCastException success) {}
660 dl 1.3 }
661    
662    
663     /**
664     * addAll(null) throws NPE
665     */
666     public void testDescendingAddAll1() {
667     try {
668     NavigableSet q = dset0();
669     q.addAll(null);
670     shouldThrow();
671 jsr166 1.7 } catch (NullPointerException success) {}
672 dl 1.3 }
673     /**
674     * addAll of a collection with null elements throws NPE
675     */
676     public void testDescendingAddAll2() {
677     try {
678     NavigableSet q = dset0();
679     Integer[] ints = new Integer[SIZE];
680     q.addAll(Arrays.asList(ints));
681     shouldThrow();
682 jsr166 1.7 } catch (NullPointerException success) {}
683 dl 1.3 }
684     /**
685     * addAll of a collection with any null elements throws NPE after
686     * possibly adding some elements
687     */
688     public void testDescendingAddAll3() {
689     try {
690     NavigableSet q = dset0();
691     Integer[] ints = new Integer[SIZE];
692     for (int i = 0; i < SIZE-1; ++i)
693     ints[i] = new Integer(i+SIZE);
694     q.addAll(Arrays.asList(ints));
695     shouldThrow();
696 jsr166 1.7 } catch (NullPointerException success) {}
697 dl 1.3 }
698    
699     /**
700     * Set contains all elements of successful addAll
701     */
702     public void testDescendingAddAll5() {
703 jsr166 1.7 Integer[] empty = new Integer[0];
704     Integer[] ints = new Integer[SIZE];
705     for (int i = 0; i < SIZE; ++i)
706     ints[i] = new Integer(SIZE-1- i);
707     NavigableSet q = dset0();
708     assertFalse(q.addAll(Arrays.asList(empty)));
709     assertTrue(q.addAll(Arrays.asList(ints)));
710     for (int i = 0; i < SIZE; ++i)
711     assertEquals(new Integer(i), q.pollFirst());
712 dl 1.3 }
713    
714     /**
715     * poll succeeds unless empty
716     */
717     public void testDescendingPoll() {
718     NavigableSet q = populatedSet(SIZE);
719     for (int i = 0; i < SIZE; ++i) {
720 jsr166 1.10 assertEquals(i, q.pollFirst());
721 dl 1.3 }
722 jsr166 1.8 assertNull(q.pollFirst());
723 dl 1.3 }
724    
725     /**
726     * remove(x) removes x and returns true if present
727     */
728     public void testDescendingRemoveElement() {
729     NavigableSet q = populatedSet(SIZE);
730     for (int i = 1; i < SIZE; i+=2) {
731     assertTrue(q.remove(new Integer(i)));
732     }
733     for (int i = 0; i < SIZE; i+=2) {
734     assertTrue(q.remove(new Integer(i)));
735     assertFalse(q.remove(new Integer(i+1)));
736     }
737     assertTrue(q.isEmpty());
738     }
739 jsr166 1.4
740 dl 1.3 /**
741     * contains(x) reports true when elements added but not yet removed
742     */
743     public void testDescendingContains() {
744     NavigableSet q = populatedSet(SIZE);
745     for (int i = 0; i < SIZE; ++i) {
746     assertTrue(q.contains(new Integer(i)));
747     q.pollFirst();
748     assertFalse(q.contains(new Integer(i)));
749     }
750     }
751    
752     /**
753     * clear removes all elements
754     */
755     public void testDescendingClear() {
756     NavigableSet q = populatedSet(SIZE);
757     q.clear();
758     assertTrue(q.isEmpty());
759     assertEquals(0, q.size());
760 jsr166 1.10 assertTrue(q.add(new Integer(1)));
761 dl 1.3 assertFalse(q.isEmpty());
762     q.clear();
763     assertTrue(q.isEmpty());
764     }
765    
766     /**
767     * containsAll(c) is true when c contains a subset of elements
768     */
769     public void testDescendingContainsAll() {
770     NavigableSet q = populatedSet(SIZE);
771     NavigableSet p = dset0();
772     for (int i = 0; i < SIZE; ++i) {
773     assertTrue(q.containsAll(p));
774     assertFalse(p.containsAll(q));
775     p.add(new Integer(i));
776     }
777     assertTrue(p.containsAll(q));
778     }
779    
780     /**
781     * retainAll(c) retains only those elements of c and reports true if changed
782     */
783     public void testDescendingRetainAll() {
784     NavigableSet q = populatedSet(SIZE);
785     NavigableSet p = populatedSet(SIZE);
786     for (int i = 0; i < SIZE; ++i) {
787     boolean changed = q.retainAll(p);
788     if (i == 0)
789     assertFalse(changed);
790     else
791     assertTrue(changed);
792    
793     assertTrue(q.containsAll(p));
794     assertEquals(SIZE-i, q.size());
795     p.pollFirst();
796     }
797     }
798    
799     /**
800     * removeAll(c) removes only those elements of c and reports true if changed
801     */
802     public void testDescendingRemoveAll() {
803     for (int i = 1; i < SIZE; ++i) {
804     NavigableSet q = populatedSet(SIZE);
805     NavigableSet p = populatedSet(i);
806     assertTrue(q.removeAll(p));
807     assertEquals(SIZE-i, q.size());
808     for (int j = 0; j < i; ++j) {
809     Integer I = (Integer)(p.pollFirst());
810     assertFalse(q.contains(I));
811     }
812     }
813     }
814    
815 jsr166 1.4
816 dl 1.3
817     /**
818     * lower returns preceding element
819     */
820     public void testDescendingLower() {
821     NavigableSet q = dset5();
822     Object e1 = q.lower(m3);
823     assertEquals(m2, e1);
824    
825     Object e2 = q.lower(m6);
826     assertEquals(m5, e2);
827    
828     Object e3 = q.lower(m1);
829     assertNull(e3);
830    
831     Object e4 = q.lower(zero);
832     assertNull(e4);
833    
834     }
835    
836     /**
837     * higher returns next element
838     */
839     public void testDescendingHigher() {
840     NavigableSet q = dset5();
841     Object e1 = q.higher(m3);
842     assertEquals(m4, e1);
843    
844     Object e2 = q.higher(zero);
845     assertEquals(m1, e2);
846    
847     Object e3 = q.higher(m5);
848     assertNull(e3);
849    
850     Object e4 = q.higher(m6);
851     assertNull(e4);
852    
853     }
854    
855     /**
856     * floor returns preceding element
857     */
858     public void testDescendingFloor() {
859     NavigableSet q = dset5();
860     Object e1 = q.floor(m3);
861     assertEquals(m3, e1);
862    
863     Object e2 = q.floor(m6);
864     assertEquals(m5, e2);
865    
866     Object e3 = q.floor(m1);
867     assertEquals(m1, e3);
868    
869     Object e4 = q.floor(zero);
870     assertNull(e4);
871    
872     }
873    
874     /**
875     * ceiling returns next element
876     */
877     public void testDescendingCeiling() {
878     NavigableSet q = dset5();
879     Object e1 = q.ceiling(m3);
880     assertEquals(m3, e1);
881    
882     Object e2 = q.ceiling(zero);
883     assertEquals(m1, e2);
884    
885     Object e3 = q.ceiling(m5);
886     assertEquals(m5, e3);
887    
888     Object e4 = q.ceiling(m6);
889     assertNull(e4);
890    
891     }
892    
893     /**
894     * toArray contains all elements
895     */
896     public void testDescendingToArray() {
897     NavigableSet q = populatedSet(SIZE);
898 jsr166 1.8 Object[] o = q.toArray();
899 dl 1.3 Arrays.sort(o);
900 jsr166 1.8 for (int i = 0; i < o.length; i++)
901     assertEquals(o[i], q.pollFirst());
902 dl 1.3 }
903    
904     /**
905     * toArray(a) contains all elements
906     */
907     public void testDescendingToArray2() {
908     NavigableSet q = populatedSet(SIZE);
909 jsr166 1.8 Integer[] ints = new Integer[SIZE];
910     ints = (Integer[])q.toArray(ints);
911 dl 1.3 Arrays.sort(ints);
912 jsr166 1.5 for (int i = 0; i < ints.length; i++)
913 dl 1.3 assertEquals(ints[i], q.pollFirst());
914     }
915 jsr166 1.4
916 dl 1.3 /**
917     * iterator iterates through all elements
918     */
919     public void testDescendingIterator() {
920     NavigableSet q = populatedSet(SIZE);
921     int i = 0;
922 jsr166 1.8 Iterator it = q.iterator();
923 jsr166 1.5 while (it.hasNext()) {
924 dl 1.3 assertTrue(q.contains(it.next()));
925     ++i;
926     }
927     assertEquals(i, SIZE);
928     }
929    
930     /**
931     * iterator of empty set has no elements
932     */
933     public void testDescendingEmptyIterator() {
934     NavigableSet q = dset0();
935     int i = 0;
936 jsr166 1.8 Iterator it = q.iterator();
937 jsr166 1.5 while (it.hasNext()) {
938 dl 1.3 assertTrue(q.contains(it.next()));
939     ++i;
940     }
941     assertEquals(i, 0);
942     }
943    
944     /**
945     * iterator.remove removes current element
946     */
947     public void testDescendingIteratorRemove () {
948     final NavigableSet q = dset0();
949     q.add(new Integer(2));
950     q.add(new Integer(1));
951     q.add(new Integer(3));
952    
953     Iterator it = q.iterator();
954     it.next();
955     it.remove();
956    
957     it = q.iterator();
958 jsr166 1.10 assertEquals(it.next(), 2);
959     assertEquals(it.next(), 3);
960 dl 1.3 assertFalse(it.hasNext());
961     }
962    
963    
964     /**
965     * toString contains toStrings of elements
966     */
967     public void testDescendingToString() {
968     NavigableSet q = populatedSet(SIZE);
969     String s = q.toString();
970     for (int i = 0; i < SIZE; ++i) {
971     assertTrue(s.indexOf(String.valueOf(i)) >= 0);
972     }
973 jsr166 1.4 }
974 dl 1.3
975     /**
976 jsr166 1.4 * A deserialized serialized set has same elements
977 dl 1.3 */
978 jsr166 1.7 public void testDescendingSerialization() throws Exception {
979 dl 1.3 NavigableSet q = populatedSet(SIZE);
980 jsr166 1.7 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
981     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
982     out.writeObject(q);
983     out.close();
984    
985     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
986     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
987     NavigableSet r = (NavigableSet)in.readObject();
988     assertEquals(q.size(), r.size());
989     while (!q.isEmpty())
990     assertEquals(q.pollFirst(), r.pollFirst());
991 dl 1.3 }
992    
993     /**
994     * subSet returns set with keys in requested range
995     */
996     public void testDescendingSubSetContents() {
997     NavigableSet set = dset5();
998     SortedSet sm = set.subSet(m2, m4);
999     assertEquals(m2, sm.first());
1000     assertEquals(m3, sm.last());
1001     assertEquals(2, sm.size());
1002     assertFalse(sm.contains(m1));
1003     assertTrue(sm.contains(m2));
1004     assertTrue(sm.contains(m3));
1005     assertFalse(sm.contains(m4));
1006     assertFalse(sm.contains(m5));
1007     Iterator i = sm.iterator();
1008     Object k;
1009     k = (Integer)(i.next());
1010     assertEquals(m2, k);
1011     k = (Integer)(i.next());
1012     assertEquals(m3, k);
1013     assertFalse(i.hasNext());
1014     Iterator j = sm.iterator();
1015     j.next();
1016     j.remove();
1017     assertFalse(set.contains(m2));
1018     assertEquals(4, set.size());
1019     assertEquals(1, sm.size());
1020     assertEquals(m3, sm.first());
1021     assertEquals(m3, sm.last());
1022     assertTrue(sm.remove(m3));
1023     assertTrue(sm.isEmpty());
1024     assertEquals(3, set.size());
1025     }
1026    
1027     public void testDescendingSubSetContents2() {
1028     NavigableSet set = dset5();
1029     SortedSet sm = set.subSet(m2, m3);
1030     assertEquals(1, sm.size());
1031     assertEquals(m2, sm.first());
1032     assertEquals(m2, sm.last());
1033     assertFalse(sm.contains(m1));
1034     assertTrue(sm.contains(m2));
1035     assertFalse(sm.contains(m3));
1036     assertFalse(sm.contains(m4));
1037     assertFalse(sm.contains(m5));
1038     Iterator i = sm.iterator();
1039     Object k;
1040     k = (Integer)(i.next());
1041     assertEquals(m2, k);
1042     assertFalse(i.hasNext());
1043     Iterator j = sm.iterator();
1044     j.next();
1045     j.remove();
1046     assertFalse(set.contains(m2));
1047     assertEquals(4, set.size());
1048     assertEquals(0, sm.size());
1049     assertTrue(sm.isEmpty());
1050     assertFalse(sm.remove(m3));
1051     assertEquals(4, set.size());
1052     }
1053    
1054     /**
1055     * headSet returns set with keys in requested range
1056     */
1057     public void testDescendingHeadSetContents() {
1058     NavigableSet set = dset5();
1059     SortedSet sm = set.headSet(m4);
1060     assertTrue(sm.contains(m1));
1061     assertTrue(sm.contains(m2));
1062     assertTrue(sm.contains(m3));
1063     assertFalse(sm.contains(m4));
1064     assertFalse(sm.contains(m5));
1065     Iterator i = sm.iterator();
1066     Object k;
1067     k = (Integer)(i.next());
1068     assertEquals(m1, k);
1069     k = (Integer)(i.next());
1070     assertEquals(m2, k);
1071     k = (Integer)(i.next());
1072     assertEquals(m3, k);
1073     assertFalse(i.hasNext());
1074     sm.clear();
1075     assertTrue(sm.isEmpty());
1076     assertEquals(2, set.size());
1077     assertEquals(m4, set.first());
1078     }
1079    
1080     /**
1081     * tailSet returns set with keys in requested range
1082     */
1083     public void testDescendingTailSetContents() {
1084     NavigableSet set = dset5();
1085     SortedSet sm = set.tailSet(m2);
1086     assertFalse(sm.contains(m1));
1087     assertTrue(sm.contains(m2));
1088     assertTrue(sm.contains(m3));
1089     assertTrue(sm.contains(m4));
1090     assertTrue(sm.contains(m5));
1091     Iterator i = sm.iterator();
1092     Object k;
1093     k = (Integer)(i.next());
1094     assertEquals(m2, k);
1095     k = (Integer)(i.next());
1096     assertEquals(m3, k);
1097     k = (Integer)(i.next());
1098     assertEquals(m4, k);
1099     k = (Integer)(i.next());
1100     assertEquals(m5, k);
1101     assertFalse(i.hasNext());
1102    
1103     SortedSet ssm = sm.tailSet(m4);
1104     assertEquals(m4, ssm.first());
1105     assertEquals(m5, ssm.last());
1106     assertTrue(ssm.remove(m4));
1107     assertEquals(1, ssm.size());
1108     assertEquals(3, sm.size());
1109     assertEquals(4, set.size());
1110     }
1111    
1112 dl 1.1 }