ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentSkipListSubSetTest.java
Revision: 1.9
Committed: Sat Nov 21 10:25:05 2009 UTC (14 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.8: +34 -52 lines
Log Message:
improve exception handling

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