ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentSkipListSubSetTest.java
Revision: 1.20
Committed: Tue May 31 16:16:23 2011 UTC (12 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.19: +35 -27 lines
Log Message:
use serialClone in serialization tests; update imports

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 jsr166 1.18 * http://creativecommons.org/publicdomain/zero/1.0/
5 dl 1.1 */
6    
7     import junit.framework.*;
8 jsr166 1.20 import java.util.Arrays;
9     import java.util.BitSet;
10     import java.util.Collection;
11     import java.util.Comparator;
12     import java.util.Iterator;
13     import java.util.NavigableSet;
14     import java.util.NoSuchElementException;
15     import java.util.Random;
16     import java.util.Set;
17     import java.util.SortedSet;
18     import java.util.concurrent.ConcurrentSkipListSet;
19 dl 1.1
20     public class ConcurrentSkipListSubSetTest extends JSR166TestCase {
21     public static void main(String[] args) {
22 jsr166 1.13 junit.textui.TestRunner.run(suite());
23 dl 1.1 }
24     public static Test suite() {
25 jsr166 1.8 return new TestSuite(ConcurrentSkipListSubSetTest.class);
26 dl 1.1 }
27    
28 jsr166 1.5 static class MyReverseComparator implements Comparator {
29 dl 1.1 public int compare(Object x, Object y) {
30 jsr166 1.11 return ((Comparable)y).compareTo(x);
31 dl 1.1 }
32     }
33    
34     /**
35     * Create a set of given size containing consecutive
36     * Integers 0 ... n.
37     */
38 jsr166 1.16 private NavigableSet<Integer> populatedSet(int n) {
39     ConcurrentSkipListSet<Integer> q =
40     new ConcurrentSkipListSet<Integer>();
41 dl 1.1 assertTrue(q.isEmpty());
42    
43 jsr166 1.8 for (int i = n-1; i >= 0; i-=2)
44     assertTrue(q.add(new Integer(i)));
45     for (int i = (n & 1); i < n; i+=2)
46     assertTrue(q.add(new Integer(i)));
47 dl 1.1 assertTrue(q.add(new Integer(-n)));
48     assertTrue(q.add(new Integer(n)));
49 dl 1.4 NavigableSet s = q.subSet(new Integer(0), true, new Integer(n), false);
50 dl 1.1 assertFalse(s.isEmpty());
51 jsr166 1.8 assertEquals(n, s.size());
52 dl 1.1 return s;
53     }
54    
55     /**
56     * Create set of first 5 ints
57     */
58     private NavigableSet set5() {
59     ConcurrentSkipListSet q = new ConcurrentSkipListSet();
60     assertTrue(q.isEmpty());
61     q.add(one);
62     q.add(two);
63     q.add(three);
64     q.add(four);
65     q.add(five);
66     q.add(zero);
67     q.add(seven);
68 dl 1.4 NavigableSet s = q.subSet(one, true, seven, false);
69 jsr166 1.8 assertEquals(5, s.size());
70 dl 1.4 return s;
71     }
72    
73     /**
74     * Create set of first 5 negative ints
75     */
76     private NavigableSet dset5() {
77     ConcurrentSkipListSet q = new ConcurrentSkipListSet();
78     assertTrue(q.isEmpty());
79     q.add(m1);
80     q.add(m2);
81     q.add(m3);
82     q.add(m4);
83     q.add(m5);
84     NavigableSet s = q.descendingSet();
85 jsr166 1.8 assertEquals(5, s.size());
86 dl 1.1 return s;
87     }
88    
89 jsr166 1.5 private static NavigableSet set0() {
90 jsr166 1.8 ConcurrentSkipListSet set = new ConcurrentSkipListSet();
91 dl 1.1 assertTrue(set.isEmpty());
92 dl 1.4 return set.tailSet(m1, true);
93     }
94    
95 jsr166 1.5 private static NavigableSet dset0() {
96 jsr166 1.8 ConcurrentSkipListSet set = new ConcurrentSkipListSet();
97 dl 1.4 assertTrue(set.isEmpty());
98     return set;
99 dl 1.1 }
100 jsr166 1.5
101 dl 1.1 /**
102     * A new set has unbounded capacity
103     */
104     public void testConstructor1() {
105     assertEquals(0, set0().size());
106     }
107    
108     /**
109     * isEmpty is true before add, false after
110     */
111     public void testEmpty() {
112     NavigableSet q = set0();
113     assertTrue(q.isEmpty());
114     q.add(new Integer(1));
115     assertFalse(q.isEmpty());
116     q.add(new Integer(2));
117     q.pollFirst();
118     q.pollFirst();
119     assertTrue(q.isEmpty());
120     }
121    
122     /**
123     * size changes when elements added and removed
124     */
125     public void testSize() {
126     NavigableSet q = populatedSet(SIZE);
127     for (int i = 0; i < SIZE; ++i) {
128     assertEquals(SIZE-i, q.size());
129     q.pollFirst();
130     }
131     for (int i = 0; i < SIZE; ++i) {
132     assertEquals(i, q.size());
133     q.add(new Integer(i));
134     }
135     }
136    
137     /**
138     * add(null) throws NPE
139     */
140     public void testAddNull() {
141 jsr166 1.8 try {
142 dl 1.1 NavigableSet q = set0();
143     q.add(null);
144     shouldThrow();
145 jsr166 1.9 } catch (NullPointerException success) {}
146 dl 1.1 }
147    
148     /**
149     * Add of comparable element succeeds
150     */
151     public void testAdd() {
152     NavigableSet q = set0();
153     assertTrue(q.add(six));
154     }
155    
156     /**
157     * Add of duplicate element fails
158     */
159     public void testAddDup() {
160     NavigableSet q = set0();
161     assertTrue(q.add(six));
162     assertFalse(q.add(six));
163     }
164    
165     /**
166     * Add of non-Comparable throws CCE
167     */
168     public void testAddNonComparable() {
169     try {
170     NavigableSet q = set0();
171     q.add(new Object());
172     q.add(new Object());
173     q.add(new Object());
174     shouldThrow();
175 jsr166 1.9 } catch (ClassCastException success) {}
176 dl 1.1 }
177    
178     /**
179     * addAll(null) throws NPE
180     */
181     public void testAddAll1() {
182     try {
183     NavigableSet q = set0();
184     q.addAll(null);
185     shouldThrow();
186 jsr166 1.9 } catch (NullPointerException success) {}
187 dl 1.1 }
188 jsr166 1.14
189 dl 1.1 /**
190     * addAll of a collection with null elements throws NPE
191     */
192     public void testAddAll2() {
193     try {
194     NavigableSet q = set0();
195     Integer[] ints = new Integer[SIZE];
196     q.addAll(Arrays.asList(ints));
197     shouldThrow();
198 jsr166 1.9 } catch (NullPointerException success) {}
199 dl 1.1 }
200 jsr166 1.14
201 dl 1.1 /**
202     * addAll of a collection with any null elements throws NPE after
203     * possibly adding some elements
204     */
205     public void testAddAll3() {
206     try {
207     NavigableSet q = set0();
208     Integer[] ints = new Integer[SIZE];
209     for (int i = 0; i < SIZE-1; ++i)
210     ints[i] = new Integer(i+SIZE);
211     q.addAll(Arrays.asList(ints));
212     shouldThrow();
213 jsr166 1.9 } catch (NullPointerException success) {}
214 dl 1.1 }
215    
216     /**
217     * Set contains all elements of successful addAll
218     */
219     public void testAddAll5() {
220 jsr166 1.10 Integer[] empty = new Integer[0];
221     Integer[] ints = new Integer[SIZE];
222     for (int i = 0; i < SIZE; ++i)
223     ints[i] = new Integer(SIZE-1- i);
224     NavigableSet q = set0();
225     assertFalse(q.addAll(Arrays.asList(empty)));
226     assertTrue(q.addAll(Arrays.asList(ints)));
227     for (int i = 0; i < SIZE; ++i)
228     assertEquals(new Integer(i), q.pollFirst());
229 dl 1.1 }
230    
231     /**
232     * poll succeeds unless empty
233     */
234     public void testPoll() {
235     NavigableSet q = populatedSet(SIZE);
236     for (int i = 0; i < SIZE; ++i) {
237 jsr166 1.11 assertEquals(i, q.pollFirst());
238 dl 1.1 }
239 jsr166 1.8 assertNull(q.pollFirst());
240 dl 1.1 }
241    
242     /**
243     * remove(x) removes x and returns true if present
244     */
245     public void testRemoveElement() {
246     NavigableSet q = populatedSet(SIZE);
247     for (int i = 1; i < SIZE; i+=2) {
248 jsr166 1.17 assertTrue(q.contains(i));
249     assertTrue(q.remove(i));
250     assertFalse(q.contains(i));
251     assertTrue(q.contains(i-1));
252 dl 1.1 }
253     for (int i = 0; i < SIZE; i+=2) {
254 jsr166 1.17 assertTrue(q.contains(i));
255     assertTrue(q.remove(i));
256     assertFalse(q.contains(i));
257     assertFalse(q.remove(i+1));
258     assertFalse(q.contains(i+1));
259 dl 1.1 }
260     assertTrue(q.isEmpty());
261     }
262 jsr166 1.5
263 dl 1.1 /**
264     * contains(x) reports true when elements added but not yet removed
265     */
266     public void testContains() {
267     NavigableSet q = populatedSet(SIZE);
268     for (int i = 0; i < SIZE; ++i) {
269     assertTrue(q.contains(new Integer(i)));
270     q.pollFirst();
271     assertFalse(q.contains(new Integer(i)));
272     }
273     }
274    
275     /**
276     * clear removes all elements
277     */
278     public void testClear() {
279     NavigableSet q = populatedSet(SIZE);
280     q.clear();
281     assertTrue(q.isEmpty());
282     assertEquals(0, q.size());
283     q.add(new Integer(1));
284     assertFalse(q.isEmpty());
285     q.clear();
286     assertTrue(q.isEmpty());
287     }
288    
289     /**
290     * containsAll(c) is true when c contains a subset of elements
291     */
292     public void testContainsAll() {
293     NavigableSet q = populatedSet(SIZE);
294     NavigableSet p = set0();
295     for (int i = 0; i < SIZE; ++i) {
296     assertTrue(q.containsAll(p));
297     assertFalse(p.containsAll(q));
298     p.add(new Integer(i));
299     }
300     assertTrue(p.containsAll(q));
301     }
302    
303     /**
304     * retainAll(c) retains only those elements of c and reports true if changed
305     */
306     public void testRetainAll() {
307     NavigableSet q = populatedSet(SIZE);
308     NavigableSet p = populatedSet(SIZE);
309     for (int i = 0; i < SIZE; ++i) {
310     boolean changed = q.retainAll(p);
311     if (i == 0)
312     assertFalse(changed);
313     else
314     assertTrue(changed);
315    
316     assertTrue(q.containsAll(p));
317     assertEquals(SIZE-i, q.size());
318     p.pollFirst();
319     }
320     }
321    
322     /**
323     * removeAll(c) removes only those elements of c and reports true if changed
324     */
325     public void testRemoveAll() {
326     for (int i = 1; i < SIZE; ++i) {
327     NavigableSet q = populatedSet(SIZE);
328     NavigableSet p = populatedSet(i);
329     assertTrue(q.removeAll(p));
330     assertEquals(SIZE-i, q.size());
331     for (int j = 0; j < i; ++j) {
332     Integer I = (Integer)(p.pollFirst());
333     assertFalse(q.contains(I));
334     }
335     }
336     }
337    
338     /**
339     * lower returns preceding element
340     */
341     public void testLower() {
342     NavigableSet q = set5();
343     Object e1 = q.lower(three);
344     assertEquals(two, e1);
345    
346     Object e2 = q.lower(six);
347     assertEquals(five, e2);
348    
349     Object e3 = q.lower(one);
350     assertNull(e3);
351    
352     Object e4 = q.lower(zero);
353     assertNull(e4);
354     }
355    
356     /**
357     * higher returns next element
358     */
359     public void testHigher() {
360     NavigableSet q = set5();
361     Object e1 = q.higher(three);
362     assertEquals(four, e1);
363    
364     Object e2 = q.higher(zero);
365     assertEquals(one, e2);
366    
367     Object e3 = q.higher(five);
368     assertNull(e3);
369    
370     Object e4 = q.higher(six);
371     assertNull(e4);
372     }
373    
374     /**
375     * floor returns preceding element
376     */
377     public void testFloor() {
378     NavigableSet q = set5();
379     Object e1 = q.floor(three);
380     assertEquals(three, e1);
381    
382     Object e2 = q.floor(six);
383     assertEquals(five, e2);
384    
385     Object e3 = q.floor(one);
386     assertEquals(one, e3);
387    
388     Object e4 = q.floor(zero);
389     assertNull(e4);
390     }
391    
392     /**
393     * ceiling returns next element
394     */
395     public void testCeiling() {
396     NavigableSet q = set5();
397     Object e1 = q.ceiling(three);
398     assertEquals(three, e1);
399    
400     Object e2 = q.ceiling(zero);
401     assertEquals(one, e2);
402    
403     Object e3 = q.ceiling(five);
404     assertEquals(five, e3);
405    
406     Object e4 = q.ceiling(six);
407     assertNull(e4);
408     }
409    
410     /**
411 jsr166 1.15 * toArray contains all elements in sorted order
412 dl 1.1 */
413     public void testToArray() {
414     NavigableSet q = populatedSet(SIZE);
415 jsr166 1.8 Object[] o = q.toArray();
416     for (int i = 0; i < o.length; i++)
417 jsr166 1.15 assertSame(o[i], q.pollFirst());
418 dl 1.1 }
419    
420     /**
421 jsr166 1.15 * toArray(a) contains all elements in sorted order
422 dl 1.1 */
423     public void testToArray2() {
424 jsr166 1.16 NavigableSet<Integer> q = populatedSet(SIZE);
425 jsr166 1.8 Integer[] ints = new Integer[SIZE];
426 jsr166 1.16 Integer[] array = q.toArray(ints);
427     assertSame(ints, array);
428 jsr166 1.6 for (int i = 0; i < ints.length; i++)
429 jsr166 1.15 assertSame(ints[i], q.pollFirst());
430 dl 1.1 }
431 jsr166 1.5
432 dl 1.1 /**
433     * iterator iterates through all elements
434     */
435     public void testIterator() {
436     NavigableSet q = populatedSet(SIZE);
437     int i = 0;
438 jsr166 1.8 Iterator it = q.iterator();
439 jsr166 1.6 while (it.hasNext()) {
440 dl 1.1 assertTrue(q.contains(it.next()));
441     ++i;
442     }
443     assertEquals(i, SIZE);
444     }
445    
446     /**
447     * iterator of empty set has no elements
448     */
449     public void testEmptyIterator() {
450     NavigableSet q = set0();
451     int i = 0;
452 jsr166 1.8 Iterator it = q.iterator();
453 jsr166 1.6 while (it.hasNext()) {
454 dl 1.1 assertTrue(q.contains(it.next()));
455     ++i;
456     }
457     assertEquals(i, 0);
458     }
459    
460     /**
461     * iterator.remove removes current element
462     */
463 jsr166 1.13 public void testIteratorRemove() {
464 dl 1.1 final NavigableSet q = set0();
465     q.add(new Integer(2));
466     q.add(new Integer(1));
467     q.add(new Integer(3));
468    
469     Iterator it = q.iterator();
470     it.next();
471     it.remove();
472    
473     it = q.iterator();
474     assertEquals(it.next(), new Integer(2));
475     assertEquals(it.next(), new Integer(3));
476     assertFalse(it.hasNext());
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 jsr166 1.19 assertTrue(s.contains(String.valueOf(i)));
487 dl 1.1 }
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 jsr166 1.20 NavigableSet x = populatedSet(SIZE);
495     NavigableSet y = serialClone(x);
496    
497     assertTrue(x != y);
498     assertEquals(x.size(), y.size());
499     assertEquals(x, y);
500     assertEquals(y, x);
501     while (!x.isEmpty()) {
502     assertFalse(y.isEmpty());
503     assertEquals(x.pollFirst(), y.pollFirst());
504     }
505     assertTrue(y.isEmpty());
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     * addAll(null) throws NPE
685     */
686     public void testDescendingAddAll1() {
687     try {
688     NavigableSet q = dset0();
689     q.addAll(null);
690     shouldThrow();
691 jsr166 1.9 } catch (NullPointerException success) {}
692 dl 1.4 }
693 jsr166 1.14
694 dl 1.4 /**
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 jsr166 1.14
706 dl 1.4 /**
707     * addAll of a collection with any null elements throws NPE after
708     * possibly adding some elements
709     */
710     public void testDescendingAddAll3() {
711     try {
712     NavigableSet q = dset0();
713     Integer[] ints = new Integer[SIZE];
714     for (int i = 0; i < SIZE-1; ++i)
715     ints[i] = new Integer(i+SIZE);
716     q.addAll(Arrays.asList(ints));
717     shouldThrow();
718 jsr166 1.9 } catch (NullPointerException success) {}
719 dl 1.4 }
720    
721     /**
722     * Set contains all elements of successful addAll
723     */
724     public void testDescendingAddAll5() {
725 jsr166 1.10 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 dl 1.4 }
735    
736     /**
737     * poll succeeds unless empty
738     */
739     public void testDescendingPoll() {
740     NavigableSet q = populatedSet(SIZE);
741     for (int i = 0; i < SIZE; ++i) {
742 jsr166 1.11 assertEquals(i, q.pollFirst());
743 dl 1.4 }
744 jsr166 1.8 assertNull(q.pollFirst());
745 dl 1.4 }
746    
747     /**
748     * remove(x) removes x and returns true if present
749     */
750     public void testDescendingRemoveElement() {
751     NavigableSet q = populatedSet(SIZE);
752     for (int i = 1; i < SIZE; i+=2) {
753     assertTrue(q.remove(new Integer(i)));
754     }
755     for (int i = 0; i < SIZE; i+=2) {
756     assertTrue(q.remove(new Integer(i)));
757     assertFalse(q.remove(new Integer(i+1)));
758     }
759     assertTrue(q.isEmpty());
760     }
761 jsr166 1.5
762 dl 1.4 /**
763     * contains(x) reports true when elements added but not yet removed
764     */
765     public void testDescendingContains() {
766     NavigableSet q = populatedSet(SIZE);
767     for (int i = 0; i < SIZE; ++i) {
768     assertTrue(q.contains(new Integer(i)));
769     q.pollFirst();
770     assertFalse(q.contains(new Integer(i)));
771     }
772     }
773    
774     /**
775     * clear removes all elements
776     */
777     public void testDescendingClear() {
778     NavigableSet q = populatedSet(SIZE);
779     q.clear();
780     assertTrue(q.isEmpty());
781     assertEquals(0, q.size());
782     q.add(new Integer(1));
783     assertFalse(q.isEmpty());
784     q.clear();
785     assertTrue(q.isEmpty());
786     }
787    
788     /**
789     * containsAll(c) is true when c contains a subset of elements
790     */
791     public void testDescendingContainsAll() {
792     NavigableSet q = populatedSet(SIZE);
793     NavigableSet p = dset0();
794     for (int i = 0; i < SIZE; ++i) {
795     assertTrue(q.containsAll(p));
796     assertFalse(p.containsAll(q));
797     p.add(new Integer(i));
798     }
799     assertTrue(p.containsAll(q));
800     }
801    
802     /**
803     * retainAll(c) retains only those elements of c and reports true if changed
804     */
805     public void testDescendingRetainAll() {
806     NavigableSet q = populatedSet(SIZE);
807     NavigableSet p = populatedSet(SIZE);
808     for (int i = 0; i < SIZE; ++i) {
809     boolean changed = q.retainAll(p);
810     if (i == 0)
811     assertFalse(changed);
812     else
813     assertTrue(changed);
814    
815     assertTrue(q.containsAll(p));
816     assertEquals(SIZE-i, q.size());
817     p.pollFirst();
818     }
819     }
820    
821     /**
822     * removeAll(c) removes only those elements of c and reports true if changed
823     */
824     public void testDescendingRemoveAll() {
825     for (int i = 1; i < SIZE; ++i) {
826     NavigableSet q = populatedSet(SIZE);
827     NavigableSet p = populatedSet(i);
828     assertTrue(q.removeAll(p));
829     assertEquals(SIZE-i, q.size());
830     for (int j = 0; j < i; ++j) {
831     Integer I = (Integer)(p.pollFirst());
832     assertFalse(q.contains(I));
833     }
834     }
835     }
836    
837     /**
838     * lower returns preceding element
839     */
840     public void testDescendingLower() {
841     NavigableSet q = dset5();
842     Object e1 = q.lower(m3);
843     assertEquals(m2, e1);
844    
845     Object e2 = q.lower(m6);
846     assertEquals(m5, e2);
847    
848     Object e3 = q.lower(m1);
849     assertNull(e3);
850    
851     Object e4 = q.lower(zero);
852     assertNull(e4);
853     }
854    
855     /**
856     * higher returns next element
857     */
858     public void testDescendingHigher() {
859     NavigableSet q = dset5();
860     Object e1 = q.higher(m3);
861     assertEquals(m4, e1);
862    
863     Object e2 = q.higher(zero);
864     assertEquals(m1, e2);
865    
866     Object e3 = q.higher(m5);
867     assertNull(e3);
868    
869     Object e4 = q.higher(m6);
870     assertNull(e4);
871     }
872    
873     /**
874     * floor returns preceding element
875     */
876     public void testDescendingFloor() {
877     NavigableSet q = dset5();
878     Object e1 = q.floor(m3);
879     assertEquals(m3, e1);
880    
881     Object e2 = q.floor(m6);
882     assertEquals(m5, e2);
883    
884     Object e3 = q.floor(m1);
885     assertEquals(m1, e3);
886    
887     Object e4 = q.floor(zero);
888     assertNull(e4);
889     }
890    
891     /**
892     * ceiling returns next element
893     */
894     public void testDescendingCeiling() {
895     NavigableSet q = dset5();
896     Object e1 = q.ceiling(m3);
897     assertEquals(m3, e1);
898    
899     Object e2 = q.ceiling(zero);
900     assertEquals(m1, e2);
901    
902     Object e3 = q.ceiling(m5);
903     assertEquals(m5, e3);
904    
905     Object e4 = q.ceiling(m6);
906     assertNull(e4);
907     }
908    
909     /**
910     * toArray contains all elements
911     */
912     public void testDescendingToArray() {
913     NavigableSet q = populatedSet(SIZE);
914 jsr166 1.8 Object[] o = q.toArray();
915 dl 1.4 Arrays.sort(o);
916 jsr166 1.8 for (int i = 0; i < o.length; i++)
917     assertEquals(o[i], q.pollFirst());
918 dl 1.4 }
919    
920     /**
921     * toArray(a) contains all elements
922     */
923     public void testDescendingToArray2() {
924     NavigableSet q = populatedSet(SIZE);
925 jsr166 1.8 Integer[] ints = new Integer[SIZE];
926 jsr166 1.15 assertSame(ints, q.toArray(ints));
927 dl 1.4 Arrays.sort(ints);
928 jsr166 1.6 for (int i = 0; i < ints.length; i++)
929 dl 1.4 assertEquals(ints[i], q.pollFirst());
930     }
931 jsr166 1.5
932 dl 1.4 /**
933     * iterator iterates through all elements
934     */
935     public void testDescendingIterator() {
936     NavigableSet q = populatedSet(SIZE);
937     int i = 0;
938 jsr166 1.8 Iterator it = q.iterator();
939 jsr166 1.6 while (it.hasNext()) {
940 dl 1.4 assertTrue(q.contains(it.next()));
941     ++i;
942     }
943     assertEquals(i, SIZE);
944     }
945    
946     /**
947     * iterator of empty set has no elements
948     */
949     public void testDescendingEmptyIterator() {
950     NavigableSet q = dset0();
951     int i = 0;
952 jsr166 1.8 Iterator it = q.iterator();
953 jsr166 1.6 while (it.hasNext()) {
954 dl 1.4 assertTrue(q.contains(it.next()));
955     ++i;
956     }
957     assertEquals(i, 0);
958     }
959    
960     /**
961     * iterator.remove removes current element
962     */
963 jsr166 1.13 public void testDescendingIteratorRemove() {
964 dl 1.4 final NavigableSet q = dset0();
965     q.add(new Integer(2));
966     q.add(new Integer(1));
967     q.add(new Integer(3));
968    
969     Iterator it = q.iterator();
970     it.next();
971     it.remove();
972    
973     it = q.iterator();
974     assertEquals(it.next(), new Integer(2));
975     assertEquals(it.next(), new Integer(3));
976     assertFalse(it.hasNext());
977     }
978    
979     /**
980     * toString contains toStrings of elements
981     */
982     public void testDescendingToString() {
983     NavigableSet q = populatedSet(SIZE);
984     String s = q.toString();
985     for (int i = 0; i < SIZE; ++i) {
986 jsr166 1.19 assertTrue(s.contains(String.valueOf(i)));
987 dl 1.4 }
988 jsr166 1.5 }
989 dl 1.4
990     /**
991 jsr166 1.5 * A deserialized serialized set has same elements
992 dl 1.4 */
993 jsr166 1.9 public void testDescendingSerialization() throws Exception {
994 jsr166 1.20 NavigableSet x = dset5();
995     NavigableSet y = serialClone(x);
996    
997     assertTrue(x != y);
998     assertEquals(x.size(), y.size());
999     assertEquals(x, y);
1000     assertEquals(y, x);
1001     while (!x.isEmpty()) {
1002     assertFalse(y.isEmpty());
1003     assertEquals(x.pollFirst(), y.pollFirst());
1004     }
1005     assertTrue(y.isEmpty());
1006 dl 1.4 }
1007    
1008     /**
1009     * subSet returns set with keys in requested range
1010     */
1011     public void testDescendingSubSetContents() {
1012     NavigableSet set = dset5();
1013     SortedSet sm = set.subSet(m2, m4);
1014     assertEquals(m2, sm.first());
1015     assertEquals(m3, sm.last());
1016     assertEquals(2, sm.size());
1017     assertFalse(sm.contains(m1));
1018     assertTrue(sm.contains(m2));
1019     assertTrue(sm.contains(m3));
1020     assertFalse(sm.contains(m4));
1021     assertFalse(sm.contains(m5));
1022     Iterator i = sm.iterator();
1023     Object k;
1024     k = (Integer)(i.next());
1025     assertEquals(m2, k);
1026     k = (Integer)(i.next());
1027     assertEquals(m3, k);
1028     assertFalse(i.hasNext());
1029     Iterator j = sm.iterator();
1030     j.next();
1031     j.remove();
1032     assertFalse(set.contains(m2));
1033     assertEquals(4, set.size());
1034     assertEquals(1, sm.size());
1035     assertEquals(m3, sm.first());
1036     assertEquals(m3, sm.last());
1037     assertTrue(sm.remove(m3));
1038     assertTrue(sm.isEmpty());
1039     assertEquals(3, set.size());
1040     }
1041    
1042     public void testDescendingSubSetContents2() {
1043     NavigableSet set = dset5();
1044     SortedSet sm = set.subSet(m2, m3);
1045     assertEquals(1, sm.size());
1046     assertEquals(m2, sm.first());
1047     assertEquals(m2, sm.last());
1048     assertFalse(sm.contains(m1));
1049     assertTrue(sm.contains(m2));
1050     assertFalse(sm.contains(m3));
1051     assertFalse(sm.contains(m4));
1052     assertFalse(sm.contains(m5));
1053     Iterator i = sm.iterator();
1054     Object k;
1055     k = (Integer)(i.next());
1056     assertEquals(m2, k);
1057     assertFalse(i.hasNext());
1058     Iterator j = sm.iterator();
1059     j.next();
1060     j.remove();
1061     assertFalse(set.contains(m2));
1062     assertEquals(4, set.size());
1063     assertEquals(0, sm.size());
1064     assertTrue(sm.isEmpty());
1065     assertFalse(sm.remove(m3));
1066     assertEquals(4, set.size());
1067     }
1068    
1069     /**
1070     * headSet returns set with keys in requested range
1071     */
1072     public void testDescendingHeadSetContents() {
1073     NavigableSet set = dset5();
1074     SortedSet sm = set.headSet(m4);
1075     assertTrue(sm.contains(m1));
1076     assertTrue(sm.contains(m2));
1077     assertTrue(sm.contains(m3));
1078     assertFalse(sm.contains(m4));
1079     assertFalse(sm.contains(m5));
1080     Iterator i = sm.iterator();
1081     Object k;
1082     k = (Integer)(i.next());
1083     assertEquals(m1, k);
1084     k = (Integer)(i.next());
1085     assertEquals(m2, k);
1086     k = (Integer)(i.next());
1087     assertEquals(m3, k);
1088     assertFalse(i.hasNext());
1089     sm.clear();
1090     assertTrue(sm.isEmpty());
1091     assertEquals(2, set.size());
1092     assertEquals(m4, set.first());
1093     }
1094    
1095     /**
1096     * tailSet returns set with keys in requested range
1097     */
1098     public void testDescendingTailSetContents() {
1099     NavigableSet set = dset5();
1100     SortedSet sm = set.tailSet(m2);
1101     assertFalse(sm.contains(m1));
1102     assertTrue(sm.contains(m2));
1103     assertTrue(sm.contains(m3));
1104     assertTrue(sm.contains(m4));
1105     assertTrue(sm.contains(m5));
1106     Iterator i = sm.iterator();
1107     Object k;
1108     k = (Integer)(i.next());
1109     assertEquals(m2, k);
1110     k = (Integer)(i.next());
1111     assertEquals(m3, k);
1112     k = (Integer)(i.next());
1113     assertEquals(m4, k);
1114     k = (Integer)(i.next());
1115     assertEquals(m5, k);
1116     assertFalse(i.hasNext());
1117    
1118     SortedSet ssm = sm.tailSet(m4);
1119     assertEquals(m4, ssm.first());
1120     assertEquals(m5, ssm.last());
1121     assertTrue(ssm.remove(m4));
1122     assertEquals(1, ssm.size());
1123     assertEquals(3, sm.size());
1124     assertEquals(4, set.size());
1125     }
1126    
1127 dl 1.1 }