ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentSkipListSubSetTest.java
Revision: 1.30
Committed: Sat Feb 28 18:10:55 2015 UTC (9 years, 2 months ago) by jsr166
Branch: MAIN
Changes since 1.29: +18 -18 lines
Log Message:
narrow scope of try-catch

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