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