ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentSkipListSubSetTest.java
Revision: 1.17
Committed: Thu Nov 18 20:21:53 2010 UTC (13 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.16: +9 -3 lines
Log Message:
add more assertions to testRemoveElement

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