ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentSkipListSubSetTest.java
Revision: 1.37
Committed: Fri Aug 4 03:30:21 2017 UTC (6 years, 9 months ago) by jsr166
Branch: MAIN
Changes since 1.36: +2 -2 lines
Log Message:
improve javadoc wording for testSerialization methods

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.32 main(suite(), args);
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 jsr166 1.35 * Integers 0 ... n - 1.
34 dl 1.1 */
35 jsr166 1.36 private static NavigableSet<Integer> populatedSet(int n) {
36 jsr166 1.16 ConcurrentSkipListSet<Integer> q =
37     new ConcurrentSkipListSet<Integer>();
38 dl 1.1 assertTrue(q.isEmpty());
39    
40 jsr166 1.34 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 jsr166 1.36 private static NavigableSet set5() {
56 dl 1.1 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 jsr166 1.36 private static NavigableSet dset5() {
74 dl 1.4 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 jsr166 1.33 assertEquals(SIZE - i, q.size());
126 dl 1.1 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     shouldThrow();
171 jsr166 1.9 } catch (ClassCastException success) {}
172 dl 1.1 }
173    
174     /**
175     * addAll(null) throws NPE
176     */
177     public void testAddAll1() {
178 jsr166 1.30 NavigableSet q = set0();
179 dl 1.1 try {
180     q.addAll(null);
181     shouldThrow();
182 jsr166 1.9 } catch (NullPointerException success) {}
183 dl 1.1 }
184 jsr166 1.14
185 dl 1.1 /**
186     * addAll of a collection with null elements throws NPE
187     */
188     public void testAddAll2() {
189 jsr166 1.30 NavigableSet q = set0();
190     Integer[] ints = new Integer[SIZE];
191 dl 1.1 try {
192     q.addAll(Arrays.asList(ints));
193     shouldThrow();
194 jsr166 1.9 } catch (NullPointerException success) {}
195 dl 1.1 }
196 jsr166 1.14
197 dl 1.1 /**
198     * addAll of a collection with any null elements throws NPE after
199     * possibly adding some elements
200     */
201     public void testAddAll3() {
202 jsr166 1.30 NavigableSet q = set0();
203     Integer[] ints = new Integer[SIZE];
204 jsr166 1.33 for (int i = 0; i < SIZE - 1; ++i)
205     ints[i] = new Integer(i + SIZE);
206 dl 1.1 try {
207     q.addAll(Arrays.asList(ints));
208     shouldThrow();
209 jsr166 1.9 } catch (NullPointerException success) {}
210 dl 1.1 }
211    
212     /**
213     * Set contains all elements of successful addAll
214     */
215     public void testAddAll5() {
216 jsr166 1.10 Integer[] empty = new Integer[0];
217     Integer[] ints = new Integer[SIZE];
218     for (int i = 0; i < SIZE; ++i)
219 jsr166 1.33 ints[i] = new Integer(SIZE - 1 - i);
220 jsr166 1.10 NavigableSet q = set0();
221     assertFalse(q.addAll(Arrays.asList(empty)));
222     assertTrue(q.addAll(Arrays.asList(ints)));
223     for (int i = 0; i < SIZE; ++i)
224     assertEquals(new Integer(i), q.pollFirst());
225 dl 1.1 }
226    
227     /**
228     * poll succeeds unless empty
229     */
230     public void testPoll() {
231     NavigableSet q = populatedSet(SIZE);
232     for (int i = 0; i < SIZE; ++i) {
233 jsr166 1.11 assertEquals(i, q.pollFirst());
234 dl 1.1 }
235 jsr166 1.8 assertNull(q.pollFirst());
236 dl 1.1 }
237    
238     /**
239     * remove(x) removes x and returns true if present
240     */
241     public void testRemoveElement() {
242     NavigableSet q = populatedSet(SIZE);
243 jsr166 1.27 for (int i = 1; i < SIZE; i += 2) {
244 jsr166 1.17 assertTrue(q.contains(i));
245     assertTrue(q.remove(i));
246     assertFalse(q.contains(i));
247 jsr166 1.34 assertTrue(q.contains(i - 1));
248 dl 1.1 }
249 jsr166 1.27 for (int i = 0; i < SIZE; i += 2) {
250 jsr166 1.17 assertTrue(q.contains(i));
251     assertTrue(q.remove(i));
252     assertFalse(q.contains(i));
253 jsr166 1.34 assertFalse(q.remove(i + 1));
254     assertFalse(q.contains(i + 1));
255 dl 1.1 }
256     assertTrue(q.isEmpty());
257     }
258 jsr166 1.5
259 dl 1.1 /**
260     * contains(x) reports true when elements added but not yet removed
261     */
262     public void testContains() {
263     NavigableSet q = populatedSet(SIZE);
264     for (int i = 0; i < SIZE; ++i) {
265     assertTrue(q.contains(new Integer(i)));
266     q.pollFirst();
267     assertFalse(q.contains(new Integer(i)));
268     }
269     }
270    
271     /**
272     * clear removes all elements
273     */
274     public void testClear() {
275     NavigableSet q = populatedSet(SIZE);
276     q.clear();
277     assertTrue(q.isEmpty());
278     assertEquals(0, q.size());
279     q.add(new Integer(1));
280     assertFalse(q.isEmpty());
281     q.clear();
282     assertTrue(q.isEmpty());
283     }
284    
285     /**
286     * containsAll(c) is true when c contains a subset of elements
287     */
288     public void testContainsAll() {
289     NavigableSet q = populatedSet(SIZE);
290     NavigableSet p = set0();
291     for (int i = 0; i < SIZE; ++i) {
292     assertTrue(q.containsAll(p));
293     assertFalse(p.containsAll(q));
294     p.add(new Integer(i));
295     }
296     assertTrue(p.containsAll(q));
297     }
298    
299     /**
300     * retainAll(c) retains only those elements of c and reports true if changed
301     */
302     public void testRetainAll() {
303     NavigableSet q = populatedSet(SIZE);
304     NavigableSet p = populatedSet(SIZE);
305     for (int i = 0; i < SIZE; ++i) {
306     boolean changed = q.retainAll(p);
307     if (i == 0)
308     assertFalse(changed);
309     else
310     assertTrue(changed);
311    
312     assertTrue(q.containsAll(p));
313 jsr166 1.33 assertEquals(SIZE - i, q.size());
314 dl 1.1 p.pollFirst();
315     }
316     }
317    
318     /**
319     * removeAll(c) removes only those elements of c and reports true if changed
320     */
321     public void testRemoveAll() {
322     for (int i = 1; i < SIZE; ++i) {
323     NavigableSet q = populatedSet(SIZE);
324     NavigableSet p = populatedSet(i);
325     assertTrue(q.removeAll(p));
326 jsr166 1.33 assertEquals(SIZE - i, q.size());
327 dl 1.1 for (int j = 0; j < i; ++j) {
328 jsr166 1.28 Integer x = (Integer)(p.pollFirst());
329     assertFalse(q.contains(x));
330 dl 1.1 }
331     }
332     }
333    
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 jsr166 1.8 Iterator it = q.iterator();
434 jsr166 1.29 int i;
435     for (i = 0; it.hasNext(); i++)
436 dl 1.1 assertTrue(q.contains(it.next()));
437     assertEquals(i, SIZE);
438 jsr166 1.29 assertIteratorExhausted(it);
439 dl 1.1 }
440    
441     /**
442     * iterator of empty set has no elements
443     */
444     public void testEmptyIterator() {
445 jsr166 1.29 assertIteratorExhausted(set0().iterator());
446 dl 1.1 }
447    
448     /**
449     * iterator.remove removes current element
450     */
451 jsr166 1.13 public void testIteratorRemove() {
452 dl 1.1 final NavigableSet q = set0();
453     q.add(new Integer(2));
454     q.add(new Integer(1));
455     q.add(new Integer(3));
456    
457     Iterator it = q.iterator();
458     it.next();
459     it.remove();
460    
461     it = q.iterator();
462     assertEquals(it.next(), new Integer(2));
463     assertEquals(it.next(), new Integer(3));
464     assertFalse(it.hasNext());
465     }
466    
467     /**
468     * toString contains toStrings of elements
469     */
470     public void testToString() {
471     NavigableSet q = populatedSet(SIZE);
472     String s = q.toString();
473     for (int i = 0; i < SIZE; ++i) {
474 jsr166 1.19 assertTrue(s.contains(String.valueOf(i)));
475 dl 1.1 }
476 jsr166 1.5 }
477 dl 1.1
478     /**
479 jsr166 1.37 * A deserialized/reserialized set equals original
480 dl 1.1 */
481 jsr166 1.9 public void testSerialization() throws Exception {
482 jsr166 1.20 NavigableSet x = populatedSet(SIZE);
483     NavigableSet y = serialClone(x);
484    
485 jsr166 1.24 assertNotSame(y, x);
486 jsr166 1.20 assertEquals(x.size(), y.size());
487     assertEquals(x, y);
488     assertEquals(y, x);
489     while (!x.isEmpty()) {
490     assertFalse(y.isEmpty());
491     assertEquals(x.pollFirst(), y.pollFirst());
492     }
493     assertTrue(y.isEmpty());
494 dl 1.1 }
495    
496     /**
497     * subSet returns set with keys in requested range
498     */
499     public void testSubSetContents() {
500     NavigableSet set = set5();
501     SortedSet sm = set.subSet(two, four);
502     assertEquals(two, sm.first());
503     assertEquals(three, sm.last());
504     assertEquals(2, sm.size());
505     assertFalse(sm.contains(one));
506     assertTrue(sm.contains(two));
507     assertTrue(sm.contains(three));
508     assertFalse(sm.contains(four));
509     assertFalse(sm.contains(five));
510     Iterator i = sm.iterator();
511     Object k;
512     k = (Integer)(i.next());
513     assertEquals(two, k);
514     k = (Integer)(i.next());
515     assertEquals(three, k);
516     assertFalse(i.hasNext());
517     Iterator j = sm.iterator();
518     j.next();
519     j.remove();
520     assertFalse(set.contains(two));
521     assertEquals(4, set.size());
522     assertEquals(1, sm.size());
523     assertEquals(three, sm.first());
524     assertEquals(three, sm.last());
525     assertTrue(sm.remove(three));
526     assertTrue(sm.isEmpty());
527     assertEquals(3, set.size());
528     }
529    
530     public void testSubSetContents2() {
531     NavigableSet set = set5();
532     SortedSet sm = set.subSet(two, three);
533     assertEquals(1, sm.size());
534     assertEquals(two, sm.first());
535     assertEquals(two, sm.last());
536     assertFalse(sm.contains(one));
537     assertTrue(sm.contains(two));
538     assertFalse(sm.contains(three));
539     assertFalse(sm.contains(four));
540     assertFalse(sm.contains(five));
541     Iterator i = sm.iterator();
542     Object k;
543     k = (Integer)(i.next());
544     assertEquals(two, k);
545     assertFalse(i.hasNext());
546     Iterator j = sm.iterator();
547     j.next();
548     j.remove();
549     assertFalse(set.contains(two));
550     assertEquals(4, set.size());
551     assertEquals(0, sm.size());
552     assertTrue(sm.isEmpty());
553     assertFalse(sm.remove(three));
554     assertEquals(4, set.size());
555     }
556    
557     /**
558     * headSet returns set with keys in requested range
559     */
560     public void testHeadSetContents() {
561     NavigableSet set = set5();
562     SortedSet sm = set.headSet(four);
563     assertTrue(sm.contains(one));
564     assertTrue(sm.contains(two));
565     assertTrue(sm.contains(three));
566     assertFalse(sm.contains(four));
567     assertFalse(sm.contains(five));
568     Iterator i = sm.iterator();
569     Object k;
570     k = (Integer)(i.next());
571     assertEquals(one, k);
572     k = (Integer)(i.next());
573     assertEquals(two, k);
574     k = (Integer)(i.next());
575     assertEquals(three, k);
576     assertFalse(i.hasNext());
577     sm.clear();
578     assertTrue(sm.isEmpty());
579     assertEquals(2, set.size());
580     assertEquals(four, set.first());
581     }
582    
583     /**
584     * tailSet returns set with keys in requested range
585     */
586     public void testTailSetContents() {
587     NavigableSet set = set5();
588     SortedSet sm = set.tailSet(two);
589     assertFalse(sm.contains(one));
590     assertTrue(sm.contains(two));
591     assertTrue(sm.contains(three));
592     assertTrue(sm.contains(four));
593     assertTrue(sm.contains(five));
594     Iterator i = sm.iterator();
595     Object k;
596     k = (Integer)(i.next());
597     assertEquals(two, k);
598     k = (Integer)(i.next());
599     assertEquals(three, k);
600     k = (Integer)(i.next());
601     assertEquals(four, k);
602     k = (Integer)(i.next());
603     assertEquals(five, k);
604     assertFalse(i.hasNext());
605    
606     SortedSet ssm = sm.tailSet(four);
607     assertEquals(four, ssm.first());
608     assertEquals(five, ssm.last());
609     assertTrue(ssm.remove(four));
610     assertEquals(1, ssm.size());
611     assertEquals(3, sm.size());
612     assertEquals(4, set.size());
613     }
614    
615 dl 1.4 /**
616     * size changes when elements added and removed
617     */
618     public void testDescendingSize() {
619     NavigableSet q = populatedSet(SIZE);
620     for (int i = 0; i < SIZE; ++i) {
621 jsr166 1.33 assertEquals(SIZE - i, q.size());
622 dl 1.4 q.pollFirst();
623     }
624     for (int i = 0; i < SIZE; ++i) {
625     assertEquals(i, q.size());
626     q.add(new Integer(i));
627     }
628     }
629    
630     /**
631     * add(null) throws NPE
632     */
633     public void testDescendingAddNull() {
634 jsr166 1.30 NavigableSet q = dset0();
635 jsr166 1.8 try {
636 dl 1.4 q.add(null);
637     shouldThrow();
638 jsr166 1.9 } catch (NullPointerException success) {}
639 dl 1.4 }
640    
641     /**
642     * Add of comparable element succeeds
643     */
644     public void testDescendingAdd() {
645     NavigableSet q = dset0();
646     assertTrue(q.add(m6));
647     }
648    
649     /**
650     * Add of duplicate element fails
651     */
652     public void testDescendingAddDup() {
653     NavigableSet q = dset0();
654     assertTrue(q.add(m6));
655     assertFalse(q.add(m6));
656     }
657    
658     /**
659     * Add of non-Comparable throws CCE
660     */
661     public void testDescendingAddNonComparable() {
662 jsr166 1.30 NavigableSet q = dset0();
663 dl 1.4 try {
664     q.add(new Object());
665     q.add(new Object());
666     shouldThrow();
667 jsr166 1.9 } catch (ClassCastException success) {}
668 dl 1.4 }
669    
670     /**
671     * addAll(null) throws NPE
672     */
673     public void testDescendingAddAll1() {
674 jsr166 1.30 NavigableSet q = dset0();
675 dl 1.4 try {
676     q.addAll(null);
677     shouldThrow();
678 jsr166 1.9 } catch (NullPointerException success) {}
679 dl 1.4 }
680 jsr166 1.14
681 dl 1.4 /**
682     * addAll of a collection with null elements throws NPE
683     */
684     public void testDescendingAddAll2() {
685 jsr166 1.30 NavigableSet q = dset0();
686     Integer[] ints = new Integer[SIZE];
687 dl 1.4 try {
688     q.addAll(Arrays.asList(ints));
689     shouldThrow();
690 jsr166 1.9 } catch (NullPointerException success) {}
691 dl 1.4 }
692 jsr166 1.14
693 dl 1.4 /**
694     * addAll of a collection with any null elements throws NPE after
695     * possibly adding some elements
696     */
697     public void testDescendingAddAll3() {
698 jsr166 1.30 NavigableSet q = dset0();
699     Integer[] ints = new Integer[SIZE];
700 jsr166 1.33 for (int i = 0; i < SIZE - 1; ++i)
701     ints[i] = new Integer(i + SIZE);
702 dl 1.4 try {
703     q.addAll(Arrays.asList(ints));
704     shouldThrow();
705 jsr166 1.9 } catch (NullPointerException success) {}
706 dl 1.4 }
707    
708     /**
709     * Set contains all elements of successful addAll
710     */
711     public void testDescendingAddAll5() {
712 jsr166 1.10 Integer[] empty = new Integer[0];
713     Integer[] ints = new Integer[SIZE];
714     for (int i = 0; i < SIZE; ++i)
715 jsr166 1.33 ints[i] = new Integer(SIZE - 1 - i);
716 jsr166 1.10 NavigableSet q = dset0();
717     assertFalse(q.addAll(Arrays.asList(empty)));
718     assertTrue(q.addAll(Arrays.asList(ints)));
719     for (int i = 0; i < SIZE; ++i)
720     assertEquals(new Integer(i), q.pollFirst());
721 dl 1.4 }
722    
723     /**
724     * poll succeeds unless empty
725     */
726     public void testDescendingPoll() {
727     NavigableSet q = populatedSet(SIZE);
728     for (int i = 0; i < SIZE; ++i) {
729 jsr166 1.11 assertEquals(i, q.pollFirst());
730 dl 1.4 }
731 jsr166 1.8 assertNull(q.pollFirst());
732 dl 1.4 }
733    
734     /**
735     * remove(x) removes x and returns true if present
736     */
737     public void testDescendingRemoveElement() {
738     NavigableSet q = populatedSet(SIZE);
739 jsr166 1.27 for (int i = 1; i < SIZE; i += 2) {
740 dl 1.4 assertTrue(q.remove(new Integer(i)));
741     }
742 jsr166 1.27 for (int i = 0; i < SIZE; i += 2 ) {
743 dl 1.4 assertTrue(q.remove(new Integer(i)));
744 jsr166 1.34 assertFalse(q.remove(new Integer(i + 1)));
745 dl 1.4 }
746     assertTrue(q.isEmpty());
747     }
748 jsr166 1.5
749 dl 1.4 /**
750     * contains(x) reports true when elements added but not yet removed
751     */
752     public void testDescendingContains() {
753     NavigableSet q = populatedSet(SIZE);
754     for (int i = 0; i < SIZE; ++i) {
755     assertTrue(q.contains(new Integer(i)));
756     q.pollFirst();
757     assertFalse(q.contains(new Integer(i)));
758     }
759     }
760    
761     /**
762     * clear removes all elements
763     */
764     public void testDescendingClear() {
765     NavigableSet q = populatedSet(SIZE);
766     q.clear();
767     assertTrue(q.isEmpty());
768     assertEquals(0, q.size());
769     q.add(new Integer(1));
770     assertFalse(q.isEmpty());
771     q.clear();
772     assertTrue(q.isEmpty());
773     }
774    
775     /**
776     * containsAll(c) is true when c contains a subset of elements
777     */
778     public void testDescendingContainsAll() {
779     NavigableSet q = populatedSet(SIZE);
780     NavigableSet p = dset0();
781     for (int i = 0; i < SIZE; ++i) {
782     assertTrue(q.containsAll(p));
783     assertFalse(p.containsAll(q));
784     p.add(new Integer(i));
785     }
786     assertTrue(p.containsAll(q));
787     }
788    
789     /**
790     * retainAll(c) retains only those elements of c and reports true if changed
791     */
792     public void testDescendingRetainAll() {
793     NavigableSet q = populatedSet(SIZE);
794     NavigableSet p = populatedSet(SIZE);
795     for (int i = 0; i < SIZE; ++i) {
796     boolean changed = q.retainAll(p);
797     if (i == 0)
798     assertFalse(changed);
799     else
800     assertTrue(changed);
801    
802     assertTrue(q.containsAll(p));
803 jsr166 1.33 assertEquals(SIZE - i, q.size());
804 dl 1.4 p.pollFirst();
805     }
806     }
807    
808     /**
809     * removeAll(c) removes only those elements of c and reports true if changed
810     */
811     public void testDescendingRemoveAll() {
812     for (int i = 1; i < SIZE; ++i) {
813     NavigableSet q = populatedSet(SIZE);
814     NavigableSet p = populatedSet(i);
815     assertTrue(q.removeAll(p));
816 jsr166 1.33 assertEquals(SIZE - i, q.size());
817 dl 1.4 for (int j = 0; j < i; ++j) {
818 jsr166 1.28 Integer x = (Integer)(p.pollFirst());
819     assertFalse(q.contains(x));
820 dl 1.4 }
821     }
822     }
823    
824     /**
825     * lower returns preceding element
826     */
827     public void testDescendingLower() {
828     NavigableSet q = dset5();
829     Object e1 = q.lower(m3);
830     assertEquals(m2, e1);
831    
832     Object e2 = q.lower(m6);
833     assertEquals(m5, e2);
834    
835     Object e3 = q.lower(m1);
836     assertNull(e3);
837    
838     Object e4 = q.lower(zero);
839     assertNull(e4);
840     }
841    
842     /**
843     * higher returns next element
844     */
845     public void testDescendingHigher() {
846     NavigableSet q = dset5();
847     Object e1 = q.higher(m3);
848     assertEquals(m4, e1);
849    
850     Object e2 = q.higher(zero);
851     assertEquals(m1, e2);
852    
853     Object e3 = q.higher(m5);
854     assertNull(e3);
855    
856     Object e4 = q.higher(m6);
857     assertNull(e4);
858     }
859    
860     /**
861     * floor returns preceding element
862     */
863     public void testDescendingFloor() {
864     NavigableSet q = dset5();
865     Object e1 = q.floor(m3);
866     assertEquals(m3, e1);
867    
868     Object e2 = q.floor(m6);
869     assertEquals(m5, e2);
870    
871     Object e3 = q.floor(m1);
872     assertEquals(m1, e3);
873    
874     Object e4 = q.floor(zero);
875     assertNull(e4);
876     }
877    
878     /**
879     * ceiling returns next element
880     */
881     public void testDescendingCeiling() {
882     NavigableSet q = dset5();
883     Object e1 = q.ceiling(m3);
884     assertEquals(m3, e1);
885    
886     Object e2 = q.ceiling(zero);
887     assertEquals(m1, e2);
888    
889     Object e3 = q.ceiling(m5);
890     assertEquals(m5, e3);
891    
892     Object e4 = q.ceiling(m6);
893     assertNull(e4);
894     }
895    
896     /**
897     * toArray contains all elements
898     */
899     public void testDescendingToArray() {
900     NavigableSet q = populatedSet(SIZE);
901 jsr166 1.8 Object[] o = q.toArray();
902 dl 1.4 Arrays.sort(o);
903 jsr166 1.8 for (int i = 0; i < o.length; i++)
904     assertEquals(o[i], q.pollFirst());
905 dl 1.4 }
906    
907     /**
908     * toArray(a) contains all elements
909     */
910     public void testDescendingToArray2() {
911     NavigableSet q = populatedSet(SIZE);
912 jsr166 1.8 Integer[] ints = new Integer[SIZE];
913 jsr166 1.15 assertSame(ints, q.toArray(ints));
914 dl 1.4 Arrays.sort(ints);
915 jsr166 1.6 for (int i = 0; i < ints.length; i++)
916 dl 1.4 assertEquals(ints[i], q.pollFirst());
917     }
918 jsr166 1.5
919 dl 1.4 /**
920     * iterator iterates through all elements
921     */
922     public void testDescendingIterator() {
923     NavigableSet q = populatedSet(SIZE);
924     int i = 0;
925 jsr166 1.8 Iterator it = q.iterator();
926 jsr166 1.6 while (it.hasNext()) {
927 dl 1.4 assertTrue(q.contains(it.next()));
928     ++i;
929     }
930     assertEquals(i, SIZE);
931     }
932    
933     /**
934     * iterator of empty set has no elements
935     */
936     public void testDescendingEmptyIterator() {
937     NavigableSet q = dset0();
938     int i = 0;
939 jsr166 1.8 Iterator it = q.iterator();
940 jsr166 1.6 while (it.hasNext()) {
941 dl 1.4 assertTrue(q.contains(it.next()));
942     ++i;
943     }
944 jsr166 1.21 assertEquals(0, i);
945 dl 1.4 }
946    
947     /**
948     * iterator.remove removes current element
949     */
950 jsr166 1.13 public void testDescendingIteratorRemove() {
951 dl 1.4 final NavigableSet q = dset0();
952     q.add(new Integer(2));
953     q.add(new Integer(1));
954     q.add(new Integer(3));
955    
956     Iterator it = q.iterator();
957     it.next();
958     it.remove();
959    
960     it = q.iterator();
961     assertEquals(it.next(), new Integer(2));
962     assertEquals(it.next(), new Integer(3));
963     assertFalse(it.hasNext());
964     }
965    
966     /**
967     * toString contains toStrings of elements
968     */
969     public void testDescendingToString() {
970     NavigableSet q = populatedSet(SIZE);
971     String s = q.toString();
972     for (int i = 0; i < SIZE; ++i) {
973 jsr166 1.19 assertTrue(s.contains(String.valueOf(i)));
974 dl 1.4 }
975 jsr166 1.5 }
976 dl 1.4
977     /**
978 jsr166 1.37 * A deserialized/reserialized set equals original
979 dl 1.4 */
980 jsr166 1.9 public void testDescendingSerialization() throws Exception {
981 jsr166 1.20 NavigableSet x = dset5();
982     NavigableSet y = serialClone(x);
983    
984 jsr166 1.24 assertNotSame(y, x);
985 jsr166 1.20 assertEquals(x.size(), y.size());
986     assertEquals(x, y);
987     assertEquals(y, x);
988     while (!x.isEmpty()) {
989     assertFalse(y.isEmpty());
990     assertEquals(x.pollFirst(), y.pollFirst());
991     }
992     assertTrue(y.isEmpty());
993 dl 1.4 }
994    
995     /**
996     * subSet returns set with keys in requested range
997     */
998     public void testDescendingSubSetContents() {
999     NavigableSet set = dset5();
1000     SortedSet sm = set.subSet(m2, m4);
1001     assertEquals(m2, sm.first());
1002     assertEquals(m3, sm.last());
1003     assertEquals(2, sm.size());
1004     assertFalse(sm.contains(m1));
1005     assertTrue(sm.contains(m2));
1006     assertTrue(sm.contains(m3));
1007     assertFalse(sm.contains(m4));
1008     assertFalse(sm.contains(m5));
1009     Iterator i = sm.iterator();
1010     Object k;
1011     k = (Integer)(i.next());
1012     assertEquals(m2, k);
1013     k = (Integer)(i.next());
1014     assertEquals(m3, k);
1015     assertFalse(i.hasNext());
1016     Iterator j = sm.iterator();
1017     j.next();
1018     j.remove();
1019     assertFalse(set.contains(m2));
1020     assertEquals(4, set.size());
1021     assertEquals(1, sm.size());
1022     assertEquals(m3, sm.first());
1023     assertEquals(m3, sm.last());
1024     assertTrue(sm.remove(m3));
1025     assertTrue(sm.isEmpty());
1026     assertEquals(3, set.size());
1027     }
1028    
1029     public void testDescendingSubSetContents2() {
1030     NavigableSet set = dset5();
1031     SortedSet sm = set.subSet(m2, m3);
1032     assertEquals(1, sm.size());
1033     assertEquals(m2, sm.first());
1034     assertEquals(m2, sm.last());
1035     assertFalse(sm.contains(m1));
1036     assertTrue(sm.contains(m2));
1037     assertFalse(sm.contains(m3));
1038     assertFalse(sm.contains(m4));
1039     assertFalse(sm.contains(m5));
1040     Iterator i = sm.iterator();
1041     Object k;
1042     k = (Integer)(i.next());
1043     assertEquals(m2, k);
1044     assertFalse(i.hasNext());
1045     Iterator j = sm.iterator();
1046     j.next();
1047     j.remove();
1048     assertFalse(set.contains(m2));
1049     assertEquals(4, set.size());
1050     assertEquals(0, sm.size());
1051     assertTrue(sm.isEmpty());
1052     assertFalse(sm.remove(m3));
1053     assertEquals(4, set.size());
1054     }
1055    
1056     /**
1057     * headSet returns set with keys in requested range
1058     */
1059     public void testDescendingHeadSetContents() {
1060     NavigableSet set = dset5();
1061     SortedSet sm = set.headSet(m4);
1062     assertTrue(sm.contains(m1));
1063     assertTrue(sm.contains(m2));
1064     assertTrue(sm.contains(m3));
1065     assertFalse(sm.contains(m4));
1066     assertFalse(sm.contains(m5));
1067     Iterator i = sm.iterator();
1068     Object k;
1069     k = (Integer)(i.next());
1070     assertEquals(m1, k);
1071     k = (Integer)(i.next());
1072     assertEquals(m2, k);
1073     k = (Integer)(i.next());
1074     assertEquals(m3, k);
1075     assertFalse(i.hasNext());
1076     sm.clear();
1077     assertTrue(sm.isEmpty());
1078     assertEquals(2, set.size());
1079     assertEquals(m4, set.first());
1080     }
1081    
1082     /**
1083     * tailSet returns set with keys in requested range
1084     */
1085     public void testDescendingTailSetContents() {
1086     NavigableSet set = dset5();
1087     SortedSet sm = set.tailSet(m2);
1088     assertFalse(sm.contains(m1));
1089     assertTrue(sm.contains(m2));
1090     assertTrue(sm.contains(m3));
1091     assertTrue(sm.contains(m4));
1092     assertTrue(sm.contains(m5));
1093     Iterator i = sm.iterator();
1094     Object k;
1095     k = (Integer)(i.next());
1096     assertEquals(m2, k);
1097     k = (Integer)(i.next());
1098     assertEquals(m3, k);
1099     k = (Integer)(i.next());
1100     assertEquals(m4, k);
1101     k = (Integer)(i.next());
1102     assertEquals(m5, k);
1103     assertFalse(i.hasNext());
1104    
1105     SortedSet ssm = sm.tailSet(m4);
1106     assertEquals(m4, ssm.first());
1107     assertEquals(m5, ssm.last());
1108     assertTrue(ssm.remove(m4));
1109     assertEquals(1, ssm.size());
1110     assertEquals(3, sm.size());
1111     assertEquals(4, set.size());
1112     }
1113    
1114 dl 1.1 }