ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.34
Committed: Sun Oct 16 20:44:18 2016 UTC (7 years, 7 months ago) by jsr166
Branch: MAIN
Changes since 1.33: +1 -1 lines
Log Message:
improve populatedFoo 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 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.16 private NavigableSet<Integer> populatedSet(int n) {
37     TreeSet<Integer> q = new TreeSet<Integer>();
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     private NavigableSet set5() {
56     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     private NavigableSet dset5() {
71     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.8 Object[] o = q.toArray();
409     for (int i = 0; i < o.length; i++)
410 jsr166 1.15 assertSame(o[i], q.pollFirst());
411 dl 1.1 }
412    
413     /**
414 jsr166 1.15 * toArray(a) contains all elements in sorted order
415 dl 1.1 */
416     public void testToArray2() {
417 jsr166 1.16 NavigableSet<Integer> q = populatedSet(SIZE);
418 jsr166 1.8 Integer[] ints = new Integer[SIZE];
419 jsr166 1.16 Integer[] array = q.toArray(ints);
420     assertSame(ints, array);
421 jsr166 1.5 for (int i = 0; i < ints.length; i++)
422 jsr166 1.15 assertSame(ints[i], q.pollFirst());
423 dl 1.1 }
424 jsr166 1.4
425 dl 1.1 /**
426     * iterator iterates through all elements
427     */
428     public void testIterator() {
429     NavigableSet q = populatedSet(SIZE);
430 jsr166 1.8 Iterator it = q.iterator();
431 jsr166 1.29 int i;
432     for (i = 0; it.hasNext(); i++)
433 dl 1.1 assertTrue(q.contains(it.next()));
434     assertEquals(i, SIZE);
435 jsr166 1.29 assertIteratorExhausted(it);
436 dl 1.1 }
437    
438     /**
439     * iterator of empty set has no elements
440     */
441     public void testEmptyIterator() {
442 jsr166 1.29 assertIteratorExhausted(set0().iterator());
443 dl 1.1 }
444    
445     /**
446     * iterator.remove removes current element
447     */
448 jsr166 1.12 public void testIteratorRemove() {
449 dl 1.1 final NavigableSet q = set0();
450     q.add(new Integer(2));
451     q.add(new Integer(1));
452     q.add(new Integer(3));
453    
454     Iterator it = q.iterator();
455     it.next();
456     it.remove();
457    
458     it = q.iterator();
459 jsr166 1.21 assertEquals(2, it.next());
460     assertEquals(3, it.next());
461 dl 1.1 assertFalse(it.hasNext());
462     }
463    
464     /**
465     * toString contains toStrings of elements
466     */
467     public void testToString() {
468     NavigableSet q = populatedSet(SIZE);
469     String s = q.toString();
470     for (int i = 0; i < SIZE; ++i) {
471 jsr166 1.19 assertTrue(s.contains(String.valueOf(i)));
472 dl 1.1 }
473 jsr166 1.4 }
474 dl 1.1
475     /**
476 jsr166 1.4 * A deserialized serialized set has same elements
477 dl 1.1 */
478 jsr166 1.7 public void testSerialization() throws Exception {
479 jsr166 1.20 NavigableSet x = populatedSet(SIZE);
480     NavigableSet y = serialClone(x);
481    
482 jsr166 1.25 assertNotSame(x, y);
483 jsr166 1.20 assertEquals(x.size(), y.size());
484     assertEquals(x, y);
485     assertEquals(y, x);
486     while (!x.isEmpty()) {
487     assertFalse(y.isEmpty());
488     assertEquals(x.pollFirst(), y.pollFirst());
489     }
490     assertTrue(y.isEmpty());
491 dl 1.1 }
492    
493     /**
494     * subSet returns set with keys in requested range
495     */
496     public void testSubSetContents() {
497     NavigableSet set = set5();
498     SortedSet sm = set.subSet(two, four);
499     assertEquals(two, sm.first());
500     assertEquals(three, sm.last());
501     assertEquals(2, sm.size());
502     assertFalse(sm.contains(one));
503     assertTrue(sm.contains(two));
504     assertTrue(sm.contains(three));
505     assertFalse(sm.contains(four));
506     assertFalse(sm.contains(five));
507     Iterator i = sm.iterator();
508     Object k;
509     k = (Integer)(i.next());
510     assertEquals(two, k);
511     k = (Integer)(i.next());
512     assertEquals(three, k);
513     assertFalse(i.hasNext());
514     Iterator j = sm.iterator();
515     j.next();
516     j.remove();
517     assertFalse(set.contains(two));
518     assertEquals(4, set.size());
519     assertEquals(1, sm.size());
520     assertEquals(three, sm.first());
521     assertEquals(three, sm.last());
522     assertTrue(sm.remove(three));
523     assertTrue(sm.isEmpty());
524     assertEquals(3, set.size());
525     }
526    
527     public void testSubSetContents2() {
528     NavigableSet set = set5();
529     SortedSet sm = set.subSet(two, three);
530     assertEquals(1, sm.size());
531     assertEquals(two, sm.first());
532     assertEquals(two, sm.last());
533     assertFalse(sm.contains(one));
534     assertTrue(sm.contains(two));
535     assertFalse(sm.contains(three));
536     assertFalse(sm.contains(four));
537     assertFalse(sm.contains(five));
538     Iterator i = sm.iterator();
539     Object k;
540     k = (Integer)(i.next());
541     assertEquals(two, k);
542     assertFalse(i.hasNext());
543     Iterator j = sm.iterator();
544     j.next();
545     j.remove();
546     assertFalse(set.contains(two));
547     assertEquals(4, set.size());
548     assertEquals(0, sm.size());
549     assertTrue(sm.isEmpty());
550     assertFalse(sm.remove(three));
551     assertEquals(4, set.size());
552     }
553    
554     /**
555     * headSet returns set with keys in requested range
556     */
557     public void testHeadSetContents() {
558     NavigableSet set = set5();
559     SortedSet sm = set.headSet(four);
560     assertTrue(sm.contains(one));
561     assertTrue(sm.contains(two));
562     assertTrue(sm.contains(three));
563     assertFalse(sm.contains(four));
564     assertFalse(sm.contains(five));
565     Iterator i = sm.iterator();
566     Object k;
567     k = (Integer)(i.next());
568     assertEquals(one, k);
569     k = (Integer)(i.next());
570     assertEquals(two, k);
571     k = (Integer)(i.next());
572     assertEquals(three, k);
573     assertFalse(i.hasNext());
574     sm.clear();
575     assertTrue(sm.isEmpty());
576     assertEquals(2, set.size());
577     assertEquals(four, set.first());
578     }
579    
580     /**
581     * tailSet returns set with keys in requested range
582     */
583     public void testTailSetContents() {
584     NavigableSet set = set5();
585     SortedSet sm = set.tailSet(two);
586     assertFalse(sm.contains(one));
587     assertTrue(sm.contains(two));
588     assertTrue(sm.contains(three));
589     assertTrue(sm.contains(four));
590     assertTrue(sm.contains(five));
591     Iterator i = sm.iterator();
592     Object k;
593     k = (Integer)(i.next());
594     assertEquals(two, k);
595     k = (Integer)(i.next());
596     assertEquals(three, k);
597     k = (Integer)(i.next());
598     assertEquals(four, k);
599     k = (Integer)(i.next());
600     assertEquals(five, k);
601     assertFalse(i.hasNext());
602    
603     SortedSet ssm = sm.tailSet(four);
604     assertEquals(four, ssm.first());
605     assertEquals(five, ssm.last());
606     assertTrue(ssm.remove(four));
607     assertEquals(1, ssm.size());
608     assertEquals(3, sm.size());
609     assertEquals(4, set.size());
610     }
611    
612 dl 1.3 /**
613     * size changes when elements added and removed
614     */
615     public void testDescendingSize() {
616     NavigableSet q = populatedSet(SIZE);
617     for (int i = 0; i < SIZE; ++i) {
618 jsr166 1.32 assertEquals(SIZE - i, q.size());
619 dl 1.3 q.pollFirst();
620     }
621     for (int i = 0; i < SIZE; ++i) {
622     assertEquals(i, q.size());
623     q.add(new Integer(i));
624     }
625     }
626    
627     /**
628     * Add of comparable element succeeds
629     */
630     public void testDescendingAdd() {
631     NavigableSet q = dset0();
632     assertTrue(q.add(m6));
633     }
634    
635     /**
636     * Add of duplicate element fails
637     */
638     public void testDescendingAddDup() {
639     NavigableSet q = dset0();
640     assertTrue(q.add(m6));
641     assertFalse(q.add(m6));
642     }
643    
644     /**
645     * Add of non-Comparable throws CCE
646     */
647     public void testDescendingAddNonComparable() {
648 jsr166 1.30 NavigableSet q = dset0();
649 dl 1.3 try {
650     q.add(new Object());
651     q.add(new Object());
652     shouldThrow();
653 jsr166 1.7 } catch (ClassCastException success) {}
654 dl 1.3 }
655    
656     /**
657     * addAll(null) throws NPE
658     */
659     public void testDescendingAddAll1() {
660 jsr166 1.30 NavigableSet q = dset0();
661 dl 1.3 try {
662     q.addAll(null);
663     shouldThrow();
664 jsr166 1.7 } catch (NullPointerException success) {}
665 dl 1.3 }
666 jsr166 1.13
667 dl 1.3 /**
668     * addAll of a collection with null elements throws NPE
669     */
670     public void testDescendingAddAll2() {
671 jsr166 1.30 NavigableSet q = dset0();
672     Integer[] ints = new Integer[SIZE];
673 dl 1.3 try {
674     q.addAll(Arrays.asList(ints));
675     shouldThrow();
676 jsr166 1.7 } catch (NullPointerException success) {}
677 dl 1.3 }
678 jsr166 1.14
679 dl 1.3 /**
680     * addAll of a collection with any null elements throws NPE after
681     * possibly adding some elements
682     */
683     public void testDescendingAddAll3() {
684 jsr166 1.30 NavigableSet q = dset0();
685     Integer[] ints = new Integer[SIZE];
686 jsr166 1.32 for (int i = 0; i < SIZE - 1; ++i)
687     ints[i] = new Integer(i + SIZE);
688 dl 1.3 try {
689     q.addAll(Arrays.asList(ints));
690     shouldThrow();
691 jsr166 1.7 } catch (NullPointerException success) {}
692 dl 1.3 }
693    
694     /**
695     * Set contains all elements of successful addAll
696     */
697     public void testDescendingAddAll5() {
698 jsr166 1.7 Integer[] empty = new Integer[0];
699     Integer[] ints = new Integer[SIZE];
700     for (int i = 0; i < SIZE; ++i)
701 jsr166 1.32 ints[i] = new Integer(SIZE - 1 - i);
702 jsr166 1.7 NavigableSet q = dset0();
703     assertFalse(q.addAll(Arrays.asList(empty)));
704     assertTrue(q.addAll(Arrays.asList(ints)));
705     for (int i = 0; i < SIZE; ++i)
706     assertEquals(new Integer(i), q.pollFirst());
707 dl 1.3 }
708    
709     /**
710     * poll succeeds unless empty
711     */
712     public void testDescendingPoll() {
713     NavigableSet q = populatedSet(SIZE);
714     for (int i = 0; i < SIZE; ++i) {
715 jsr166 1.10 assertEquals(i, q.pollFirst());
716 dl 1.3 }
717 jsr166 1.8 assertNull(q.pollFirst());
718 dl 1.3 }
719    
720     /**
721     * remove(x) removes x and returns true if present
722     */
723     public void testDescendingRemoveElement() {
724     NavigableSet q = populatedSet(SIZE);
725 jsr166 1.27 for (int i = 1; i < SIZE; i += 2) {
726 dl 1.3 assertTrue(q.remove(new Integer(i)));
727     }
728 jsr166 1.27 for (int i = 0; i < SIZE; i += 2) {
729 dl 1.3 assertTrue(q.remove(new Integer(i)));
730 jsr166 1.33 assertFalse(q.remove(new Integer(i + 1)));
731 dl 1.3 }
732     assertTrue(q.isEmpty());
733     }
734 jsr166 1.4
735 dl 1.3 /**
736     * contains(x) reports true when elements added but not yet removed
737     */
738     public void testDescendingContains() {
739     NavigableSet q = populatedSet(SIZE);
740     for (int i = 0; i < SIZE; ++i) {
741     assertTrue(q.contains(new Integer(i)));
742     q.pollFirst();
743     assertFalse(q.contains(new Integer(i)));
744     }
745     }
746    
747     /**
748     * clear removes all elements
749     */
750     public void testDescendingClear() {
751     NavigableSet q = populatedSet(SIZE);
752     q.clear();
753     assertTrue(q.isEmpty());
754     assertEquals(0, q.size());
755 jsr166 1.10 assertTrue(q.add(new Integer(1)));
756 dl 1.3 assertFalse(q.isEmpty());
757     q.clear();
758     assertTrue(q.isEmpty());
759     }
760    
761     /**
762     * containsAll(c) is true when c contains a subset of elements
763     */
764     public void testDescendingContainsAll() {
765     NavigableSet q = populatedSet(SIZE);
766     NavigableSet p = dset0();
767     for (int i = 0; i < SIZE; ++i) {
768     assertTrue(q.containsAll(p));
769     assertFalse(p.containsAll(q));
770     p.add(new Integer(i));
771     }
772     assertTrue(p.containsAll(q));
773     }
774    
775     /**
776     * retainAll(c) retains only those elements of c and reports true if changed
777     */
778     public void testDescendingRetainAll() {
779     NavigableSet q = populatedSet(SIZE);
780     NavigableSet p = populatedSet(SIZE);
781     for (int i = 0; i < SIZE; ++i) {
782     boolean changed = q.retainAll(p);
783     if (i == 0)
784     assertFalse(changed);
785     else
786     assertTrue(changed);
787    
788     assertTrue(q.containsAll(p));
789 jsr166 1.32 assertEquals(SIZE - i, q.size());
790 dl 1.3 p.pollFirst();
791     }
792     }
793    
794     /**
795     * removeAll(c) removes only those elements of c and reports true if changed
796     */
797     public void testDescendingRemoveAll() {
798     for (int i = 1; i < SIZE; ++i) {
799     NavigableSet q = populatedSet(SIZE);
800     NavigableSet p = populatedSet(i);
801     assertTrue(q.removeAll(p));
802 jsr166 1.32 assertEquals(SIZE - i, q.size());
803 dl 1.3 for (int j = 0; j < i; ++j) {
804 jsr166 1.28 Integer x = (Integer)(p.pollFirst());
805     assertFalse(q.contains(x));
806 dl 1.3 }
807     }
808     }
809    
810     /**
811     * lower returns preceding element
812     */
813     public void testDescendingLower() {
814     NavigableSet q = dset5();
815     Object e1 = q.lower(m3);
816     assertEquals(m2, e1);
817    
818     Object e2 = q.lower(m6);
819     assertEquals(m5, e2);
820    
821     Object e3 = q.lower(m1);
822     assertNull(e3);
823    
824     Object e4 = q.lower(zero);
825     assertNull(e4);
826     }
827    
828     /**
829     * higher returns next element
830     */
831     public void testDescendingHigher() {
832     NavigableSet q = dset5();
833     Object e1 = q.higher(m3);
834     assertEquals(m4, e1);
835    
836     Object e2 = q.higher(zero);
837     assertEquals(m1, e2);
838    
839     Object e3 = q.higher(m5);
840     assertNull(e3);
841    
842     Object e4 = q.higher(m6);
843     assertNull(e4);
844     }
845    
846     /**
847     * floor returns preceding element
848     */
849     public void testDescendingFloor() {
850     NavigableSet q = dset5();
851     Object e1 = q.floor(m3);
852     assertEquals(m3, e1);
853    
854     Object e2 = q.floor(m6);
855     assertEquals(m5, e2);
856    
857     Object e3 = q.floor(m1);
858     assertEquals(m1, e3);
859    
860     Object e4 = q.floor(zero);
861     assertNull(e4);
862     }
863    
864     /**
865     * ceiling returns next element
866     */
867     public void testDescendingCeiling() {
868     NavigableSet q = dset5();
869     Object e1 = q.ceiling(m3);
870     assertEquals(m3, e1);
871    
872     Object e2 = q.ceiling(zero);
873     assertEquals(m1, e2);
874    
875     Object e3 = q.ceiling(m5);
876     assertEquals(m5, e3);
877    
878     Object e4 = q.ceiling(m6);
879     assertNull(e4);
880     }
881    
882     /**
883     * toArray contains all elements
884     */
885     public void testDescendingToArray() {
886     NavigableSet q = populatedSet(SIZE);
887 jsr166 1.8 Object[] o = q.toArray();
888 dl 1.3 Arrays.sort(o);
889 jsr166 1.8 for (int i = 0; i < o.length; i++)
890     assertEquals(o[i], q.pollFirst());
891 dl 1.3 }
892    
893     /**
894     * toArray(a) contains all elements
895     */
896     public void testDescendingToArray2() {
897     NavigableSet q = populatedSet(SIZE);
898 jsr166 1.8 Integer[] ints = new Integer[SIZE];
899 jsr166 1.15 assertSame(ints, q.toArray(ints));
900 dl 1.3 Arrays.sort(ints);
901 jsr166 1.5 for (int i = 0; i < ints.length; i++)
902 dl 1.3 assertEquals(ints[i], q.pollFirst());
903     }
904 jsr166 1.4
905 dl 1.3 /**
906     * iterator iterates through all elements
907     */
908     public void testDescendingIterator() {
909     NavigableSet q = populatedSet(SIZE);
910     int i = 0;
911 jsr166 1.8 Iterator it = q.iterator();
912 jsr166 1.5 while (it.hasNext()) {
913 dl 1.3 assertTrue(q.contains(it.next()));
914     ++i;
915     }
916     assertEquals(i, SIZE);
917     }
918    
919     /**
920     * iterator of empty set has no elements
921     */
922     public void testDescendingEmptyIterator() {
923     NavigableSet q = dset0();
924     int i = 0;
925 jsr166 1.8 Iterator it = q.iterator();
926 jsr166 1.5 while (it.hasNext()) {
927 dl 1.3 assertTrue(q.contains(it.next()));
928     ++i;
929     }
930 jsr166 1.21 assertEquals(0, i);
931 dl 1.3 }
932    
933     /**
934     * iterator.remove removes current element
935     */
936 jsr166 1.12 public void testDescendingIteratorRemove() {
937 dl 1.3 final NavigableSet q = dset0();
938     q.add(new Integer(2));
939     q.add(new Integer(1));
940     q.add(new Integer(3));
941    
942     Iterator it = q.iterator();
943     it.next();
944     it.remove();
945    
946     it = q.iterator();
947 jsr166 1.21 assertEquals(2, it.next());
948     assertEquals(3, it.next());
949 dl 1.3 assertFalse(it.hasNext());
950     }
951    
952     /**
953     * toString contains toStrings of elements
954     */
955     public void testDescendingToString() {
956     NavigableSet q = populatedSet(SIZE);
957     String s = q.toString();
958     for (int i = 0; i < SIZE; ++i) {
959 jsr166 1.19 assertTrue(s.contains(String.valueOf(i)));
960 dl 1.3 }
961 jsr166 1.4 }
962 dl 1.3
963     /**
964 jsr166 1.4 * A deserialized serialized set has same elements
965 dl 1.3 */
966 jsr166 1.7 public void testDescendingSerialization() throws Exception {
967 jsr166 1.20 NavigableSet x = dset5();
968     NavigableSet y = serialClone(x);
969    
970 jsr166 1.25 assertNotSame(x, y);
971 jsr166 1.20 assertEquals(x.size(), y.size());
972     assertEquals(x.toString(), y.toString());
973     assertEquals(x, y);
974     assertEquals(y, x);
975     while (!x.isEmpty()) {
976     assertFalse(y.isEmpty());
977     assertEquals(x.pollFirst(), y.pollFirst());
978     }
979     assertTrue(y.isEmpty());
980 dl 1.3 }
981    
982     /**
983     * subSet returns set with keys in requested range
984     */
985     public void testDescendingSubSetContents() {
986     NavigableSet set = dset5();
987     SortedSet sm = set.subSet(m2, m4);
988     assertEquals(m2, sm.first());
989     assertEquals(m3, sm.last());
990     assertEquals(2, sm.size());
991     assertFalse(sm.contains(m1));
992     assertTrue(sm.contains(m2));
993     assertTrue(sm.contains(m3));
994     assertFalse(sm.contains(m4));
995     assertFalse(sm.contains(m5));
996     Iterator i = sm.iterator();
997     Object k;
998     k = (Integer)(i.next());
999     assertEquals(m2, k);
1000     k = (Integer)(i.next());
1001     assertEquals(m3, k);
1002     assertFalse(i.hasNext());
1003     Iterator j = sm.iterator();
1004     j.next();
1005     j.remove();
1006     assertFalse(set.contains(m2));
1007     assertEquals(4, set.size());
1008     assertEquals(1, sm.size());
1009     assertEquals(m3, sm.first());
1010     assertEquals(m3, sm.last());
1011     assertTrue(sm.remove(m3));
1012     assertTrue(sm.isEmpty());
1013     assertEquals(3, set.size());
1014     }
1015    
1016     public void testDescendingSubSetContents2() {
1017     NavigableSet set = dset5();
1018     SortedSet sm = set.subSet(m2, m3);
1019     assertEquals(1, sm.size());
1020     assertEquals(m2, sm.first());
1021     assertEquals(m2, sm.last());
1022     assertFalse(sm.contains(m1));
1023     assertTrue(sm.contains(m2));
1024     assertFalse(sm.contains(m3));
1025     assertFalse(sm.contains(m4));
1026     assertFalse(sm.contains(m5));
1027     Iterator i = sm.iterator();
1028     Object k;
1029     k = (Integer)(i.next());
1030     assertEquals(m2, k);
1031     assertFalse(i.hasNext());
1032     Iterator j = sm.iterator();
1033     j.next();
1034     j.remove();
1035     assertFalse(set.contains(m2));
1036     assertEquals(4, set.size());
1037     assertEquals(0, sm.size());
1038     assertTrue(sm.isEmpty());
1039     assertFalse(sm.remove(m3));
1040     assertEquals(4, set.size());
1041     }
1042    
1043     /**
1044     * headSet returns set with keys in requested range
1045     */
1046     public void testDescendingHeadSetContents() {
1047     NavigableSet set = dset5();
1048     SortedSet sm = set.headSet(m4);
1049     assertTrue(sm.contains(m1));
1050     assertTrue(sm.contains(m2));
1051     assertTrue(sm.contains(m3));
1052     assertFalse(sm.contains(m4));
1053     assertFalse(sm.contains(m5));
1054     Iterator i = sm.iterator();
1055     Object k;
1056     k = (Integer)(i.next());
1057     assertEquals(m1, k);
1058     k = (Integer)(i.next());
1059     assertEquals(m2, k);
1060     k = (Integer)(i.next());
1061     assertEquals(m3, k);
1062     assertFalse(i.hasNext());
1063     sm.clear();
1064     assertTrue(sm.isEmpty());
1065     assertEquals(2, set.size());
1066     assertEquals(m4, set.first());
1067     }
1068    
1069     /**
1070     * tailSet returns set with keys in requested range
1071     */
1072     public void testDescendingTailSetContents() {
1073     NavigableSet set = dset5();
1074     SortedSet sm = set.tailSet(m2);
1075     assertFalse(sm.contains(m1));
1076     assertTrue(sm.contains(m2));
1077     assertTrue(sm.contains(m3));
1078     assertTrue(sm.contains(m4));
1079     assertTrue(sm.contains(m5));
1080     Iterator i = sm.iterator();
1081     Object k;
1082     k = (Integer)(i.next());
1083     assertEquals(m2, k);
1084     k = (Integer)(i.next());
1085     assertEquals(m3, k);
1086     k = (Integer)(i.next());
1087     assertEquals(m4, k);
1088     k = (Integer)(i.next());
1089     assertEquals(m5, k);
1090     assertFalse(i.hasNext());
1091    
1092     SortedSet ssm = sm.tailSet(m4);
1093     assertEquals(m4, ssm.first());
1094     assertEquals(m5, ssm.last());
1095     assertTrue(ssm.remove(m4));
1096     assertEquals(1, ssm.size());
1097     assertEquals(3, sm.size());
1098     assertEquals(4, set.size());
1099     }
1100    
1101 jsr166 1.24 /**
1102     * addAll is idempotent
1103     */
1104     public void testAddAll_idempotent() throws Exception {
1105     Set x = populatedSet(SIZE);
1106     Set y = new TreeSet(x);
1107     y.addAll(x);
1108     assertEquals(x, y);
1109     assertEquals(y, x);
1110     }
1111    
1112 dl 1.1 }