ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.38
Committed: Mon May 28 21:19:50 2018 UTC (5 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.37: +8 -5 lines
Log Message:
improve toArray tests

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