ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.24
Committed: Tue Apr 2 22:18:26 2013 UTC (11 years, 1 month ago) by jsr166
Branch: MAIN
Changes since 1.23: +12 -0 lines
Log Message:
add new test testAllAll_idempotent

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