ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.17
Committed: Thu Nov 18 20:21:54 2010 UTC (13 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.16: +9 -3 lines
Log Message:
add more assertions to testRemoveElement

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