ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.16
Committed: Fri Nov 5 00:17:22 2010 UTC (13 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.15: +5 -4 lines
Log Message:
very small improvements to testToArray2

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