ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
(Generate patch)

Comparing jsr166/src/test/tck/TreeSubSetTest.java (file contents):
Revision 1.1 by dl, Thu Mar 31 15:24:29 2005 UTC vs.
Revision 1.38 by jsr166, Mon May 28 21:19:50 2018 UTC

# Line 1 | Line 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
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6  
7 < import junit.framework.*;
8 < import java.util.*;
9 < import java.util.concurrent.*;
10 < import java.io.*;
7 > import java.util.Arrays;
8 > import java.util.Comparator;
9 > import java.util.Iterator;
10 > import java.util.NavigableSet;
11 > import java.util.Set;
12 > import java.util.SortedSet;
13 > import java.util.TreeSet;
14 >
15 > import junit.framework.Test;
16 > import junit.framework.TestSuite;
17  
18   public class TreeSubSetTest extends JSR166TestCase {
19      public static void main(String[] args) {
20 <        junit.textui.TestRunner.run (suite());  
20 >        main(suite(), args);
21      }
22      public static Test suite() {
23 <        return new TestSuite(TreeSubSetTest.class);
23 >        return new TestSuite(TreeSubSetTest.class);
24      }
25  
26 <    static class MyReverseComparator implements Comparator {
26 >    static class MyReverseComparator implements Comparator {
27          public int compare(Object x, Object y) {
28 <            int i = ((Integer)x).intValue();
23 <            int j = ((Integer)y).intValue();
24 <            if (i < j) return 1;
25 <            if (i > j) return -1;
26 <            return 0;
28 >            return ((Comparable)y).compareTo(x);
29          }
30      }
31  
32      /**
33 <     * Create a set of given size containing consecutive
34 <     * Integers 0 ... n.
33 >     * Returns a new set of given size containing consecutive
34 >     * Integers 0 ... n - 1.
35       */
36 <    private NavigableSet populatedSet(int n) {
37 <        TreeSet q = new TreeSet();
36 >    private static NavigableSet<Integer> populatedSet(int n) {
37 >        TreeSet<Integer> q = new TreeSet<>();
38          assertTrue(q.isEmpty());
39  
40 <        for(int i = n-1; i >= 0; i-=2)
41 <            assertTrue(q.add(new Integer(i)));
42 <        for(int i = (n & 1); i < n; i+=2)
43 <            assertTrue(q.add(new Integer(i)));
40 >        for (int i = n - 1; i >= 0; i -= 2)
41 >            assertTrue(q.add(new Integer(i)));
42 >        for (int i = (n & 1); i < n; i += 2)
43 >            assertTrue(q.add(new Integer(i)));
44          assertTrue(q.add(new Integer(-n)));
45          assertTrue(q.add(new Integer(n)));
46 <        NavigableSet s = q.navigableSubSet(new Integer(0), new Integer(n));
46 >        NavigableSet s = q.subSet(new Integer(0), true, new Integer(n), false);
47          assertFalse(s.isEmpty());
48 <        assertEquals(n, s.size());
48 >        assertEquals(n, s.size());
49          return s;
50      }
51  
52      /**
53 <     * Create set of first 5 ints
53 >     * Returns a new set of first 5 ints.
54       */
55 <    private NavigableSet set5() {
55 >    private static NavigableSet set5() {
56          TreeSet q = new TreeSet();
57          assertTrue(q.isEmpty());
58          q.add(one);
# Line 60 | Line 62 | public class TreeSubSetTest extends JSR1
62          q.add(five);
63          q.add(zero);
64          q.add(seven);
65 <        NavigableSet s = q.navigableSubSet(one, seven);
66 <        assertEquals(5, s.size());
65 >        NavigableSet s = q.subSet(one, true, seven, false);
66 >        assertEquals(5, s.size());
67 >        return s;
68 >    }
69 >
70 >    private static 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 >        assertEquals(5, s.size());
80          return s;
81      }
82  
83 <    private static NavigableSet set0() {  
84 <        TreeSet set = new TreeSet();
83 >    private static NavigableSet set0() {
84 >        TreeSet set = new TreeSet();
85 >        assertTrue(set.isEmpty());
86 >        return set.tailSet(m1, false);
87 >    }
88 >
89 >    private static NavigableSet dset0() {
90 >        TreeSet set = new TreeSet();
91          assertTrue(set.isEmpty());
92 <        return set.navigableTailSet(m1);
92 >        return set;
93      }
94 <
94 >
95      /**
96       * A new set has unbounded capacity
97       */
# Line 78 | Line 99 | public class TreeSubSetTest extends JSR1
99          assertEquals(0, set0().size());
100      }
101  
81
102      /**
103       * isEmpty is true before add, false after
104       */
105      public void testEmpty() {
106          NavigableSet q = set0();
107          assertTrue(q.isEmpty());
108 <        q.add(new Integer(1));
108 >        assertTrue(q.add(new Integer(1)));
109          assertFalse(q.isEmpty());
110 <        q.add(new Integer(2));
110 >        assertTrue(q.add(new Integer(2)));
111          q.pollFirst();
112          q.pollFirst();
113          assertTrue(q.isEmpty());
# Line 99 | Line 119 | public class TreeSubSetTest extends JSR1
119      public void testSize() {
120          NavigableSet q = populatedSet(SIZE);
121          for (int i = 0; i < SIZE; ++i) {
122 <            assertEquals(SIZE-i, q.size());
122 >            assertEquals(SIZE - i, q.size());
123              q.pollFirst();
124          }
125          for (int i = 0; i < SIZE; ++i) {
# Line 112 | Line 132 | public class TreeSubSetTest extends JSR1
132       * add(null) throws NPE
133       */
134      public void testAddNull() {
135 <        try {
136 <            NavigableSet q = set0();
135 >        NavigableSet q = set0();
136 >        try {
137              q.add(null);
138              shouldThrow();
139 <        } catch (NullPointerException success) { }  
139 >        } catch (NullPointerException success) {}
140      }
141  
142      /**
# Line 140 | Line 160 | public class TreeSubSetTest extends JSR1
160       * Add of non-Comparable throws CCE
161       */
162      public void testAddNonComparable() {
163 +        NavigableSet q = set0();
164          try {
144            NavigableSet q = set0();
145            q.add(new Object());
165              q.add(new Object());
166              q.add(new Object());
167              shouldThrow();
168 <        }
150 <        catch(ClassCastException success) {}
168 >        } catch (ClassCastException success) {}
169      }
170  
153
171      /**
172       * addAll(null) throws NPE
173       */
174      public void testAddAll1() {
175 +        NavigableSet q = set0();
176          try {
159            NavigableSet q = set0();
177              q.addAll(null);
178              shouldThrow();
179 <        }
163 <        catch (NullPointerException success) {}
179 >        } catch (NullPointerException success) {}
180      }
181 +
182      /**
183       * addAll of a collection with null elements throws NPE
184       */
185      public void testAddAll2() {
186 +        NavigableSet q = set0();
187 +        Integer[] ints = new Integer[SIZE];
188          try {
170            NavigableSet q = set0();
171            Integer[] ints = new Integer[SIZE];
189              q.addAll(Arrays.asList(ints));
190              shouldThrow();
191 <        }
175 <        catch (NullPointerException success) {}
191 >        } catch (NullPointerException success) {}
192      }
193 +
194      /**
195       * addAll of a collection with any null elements throws NPE after
196       * possibly adding some elements
197       */
198      public void testAddAll3() {
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          try {
183            NavigableSet q = set0();
184            Integer[] ints = new Integer[SIZE];
185            for (int i = 0; i < SIZE-1; ++i)
186                ints[i] = new Integer(i+SIZE);
204              q.addAll(Arrays.asList(ints));
205              shouldThrow();
206 <        }
190 <        catch (NullPointerException success) {}
206 >        } catch (NullPointerException success) {}
207      }
208  
209      /**
210       * Set contains all elements of successful addAll
211       */
212      public void testAddAll5() {
213 <        try {
214 <            Integer[] empty = new Integer[0];
215 <            Integer[] ints = new Integer[SIZE];
216 <            for (int i = 0; i < SIZE; ++i)
217 <                ints[i] = new Integer(SIZE-1- i);
218 <            NavigableSet q = set0();
219 <            assertFalse(q.addAll(Arrays.asList(empty)));
220 <            assertTrue(q.addAll(Arrays.asList(ints)));
221 <            for (int i = 0; i < SIZE; ++i)
206 <                assertEquals(new Integer(i), q.pollFirst());
207 <        }
208 <        finally {}
213 >        Integer[] empty = new Integer[0];
214 >        Integer[] ints = new Integer[SIZE];
215 >        for (int i = 0; i < SIZE; ++i)
216 >            ints[i] = new Integer(SIZE - 1 - i);
217 >        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      }
223  
224      /**
# Line 214 | Line 227 | public class TreeSubSetTest extends JSR1
227      public void testPoll() {
228          NavigableSet q = populatedSet(SIZE);
229          for (int i = 0; i < SIZE; ++i) {
230 <            assertEquals(i, ((Integer)q.pollFirst()).intValue());
230 >            assertEquals(i, q.pollFirst());
231          }
232 <        assertNull(q.pollFirst());
232 >        assertNull(q.pollFirst());
233      }
234  
235      /**
# Line 224 | Line 237 | public class TreeSubSetTest extends JSR1
237       */
238      public void testRemoveElement() {
239          NavigableSet q = populatedSet(SIZE);
240 <        for (int i = 1; i < SIZE; i+=2) {
241 <            assertTrue(q.remove(new Integer(i)));
240 >        for (int i = 1; i < SIZE; i += 2) {
241 >            assertTrue(q.contains(i));
242 >            assertTrue(q.remove(i));
243 >            assertFalse(q.contains(i));
244 >            assertTrue(q.contains(i - 1));
245          }
246 <        for (int i = 0; i < SIZE; i+=2) {
247 <            assertTrue(q.remove(new Integer(i)));
248 <            assertFalse(q.remove(new Integer(i+1)));
246 >        for (int i = 0; i < SIZE; i += 2) {
247 >            assertTrue(q.contains(i));
248 >            assertTrue(q.remove(i));
249 >            assertFalse(q.contains(i));
250 >            assertFalse(q.remove(i + 1));
251 >            assertFalse(q.contains(i + 1));
252          }
253          assertTrue(q.isEmpty());
254      }
255 <        
255 >
256      /**
257       * contains(x) reports true when elements added but not yet removed
258       */
# Line 254 | Line 273 | public class TreeSubSetTest extends JSR1
273          q.clear();
274          assertTrue(q.isEmpty());
275          assertEquals(0, q.size());
276 <        q.add(new Integer(1));
276 >        assertTrue(q.add(new Integer(1)));
277          assertFalse(q.isEmpty());
278          q.clear();
279          assertTrue(q.isEmpty());
# Line 288 | Line 307 | public class TreeSubSetTest extends JSR1
307                  assertTrue(changed);
308  
309              assertTrue(q.containsAll(p));
310 <            assertEquals(SIZE-i, q.size());
310 >            assertEquals(SIZE - i, q.size());
311              p.pollFirst();
312          }
313      }
# Line 301 | Line 320 | public class TreeSubSetTest extends JSR1
320              NavigableSet q = populatedSet(SIZE);
321              NavigableSet p = populatedSet(i);
322              assertTrue(q.removeAll(p));
323 <            assertEquals(SIZE-i, q.size());
323 >            assertEquals(SIZE - i, q.size());
324              for (int j = 0; j < i; ++j) {
325 <                Integer I = (Integer)(p.pollFirst());
326 <                assertFalse(q.contains(I));
325 >                Integer x = (Integer)(p.pollFirst());
326 >                assertFalse(q.contains(x));
327              }
328          }
329      }
330  
312    
313
331      /**
332       * lower returns preceding element
333       */
# Line 327 | Line 344 | public class TreeSubSetTest extends JSR1
344  
345          Object e4 = q.lower(zero);
346          assertNull(e4);
330
347      }
348  
349      /**
# Line 346 | Line 362 | public class TreeSubSetTest extends JSR1
362  
363          Object e4 = q.higher(six);
364          assertNull(e4);
349
365      }
366  
367      /**
# Line 365 | Line 380 | public class TreeSubSetTest extends JSR1
380  
381          Object e4 = q.floor(zero);
382          assertNull(e4);
368
383      }
384  
385      /**
# Line 384 | Line 398 | public class TreeSubSetTest extends JSR1
398  
399          Object e4 = q.ceiling(six);
400          assertNull(e4);
387
401      }
402  
403      /**
404 <     * toArray contains all elements
404 >     * toArray contains all elements in sorted order
405       */
406      public void testToArray() {
407          NavigableSet q = populatedSet(SIZE);
408 <        Object[] o = q.toArray();
409 <        Arrays.sort(o);
410 <        for(int i = 0; i < o.length; i++)
411 <            assertEquals(o[i], q.pollFirst());
408 >        Object[] a = q.toArray();
409 >        assertSame(Object[].class, a.getClass());
410 >        for (Object o : a)
411 >            assertSame(o, q.pollFirst());
412 >        assertTrue(q.isEmpty());
413      }
414  
415      /**
416 <     * toArray(a) contains all elements
416 >     * toArray(a) contains all elements in sorted order
417       */
418      public void testToArray2() {
419 <        NavigableSet q = populatedSet(SIZE);
420 <        Integer[] ints = new Integer[SIZE];
421 <        ints = (Integer[])q.toArray(ints);
422 <        Arrays.sort(ints);
423 <        for(int i = 0; i < ints.length; i++)
424 <            assertEquals(ints[i], q.pollFirst());
419 >        NavigableSet<Integer> q = populatedSet(SIZE);
420 >        Integer[] ints = new Integer[SIZE];
421 >        Integer[] array = q.toArray(ints);
422 >        assertSame(ints, array);
423 >        for (Integer o : ints)
424 >            assertSame(o, q.pollFirst());
425 >        assertTrue(q.isEmpty());
426      }
427 <    
427 >
428      /**
429       * iterator iterates through all elements
430       */
431      public void testIterator() {
432          NavigableSet q = populatedSet(SIZE);
433 <        int i = 0;
434 <        Iterator it = q.iterator();
435 <        while(it.hasNext()) {
433 >        Iterator it = q.iterator();
434 >        int i;
435 >        for (i = 0; it.hasNext(); i++)
436              assertTrue(q.contains(it.next()));
422            ++i;
423        }
437          assertEquals(i, SIZE);
438 +        assertIteratorExhausted(it);
439      }
440  
441      /**
442       * iterator of empty set has no elements
443       */
444      public void testEmptyIterator() {
445 <        NavigableSet q = set0();
432 <        int i = 0;
433 <        Iterator it = q.iterator();
434 <        while(it.hasNext()) {
435 <            assertTrue(q.contains(it.next()));
436 <            ++i;
437 <        }
438 <        assertEquals(i, 0);
445 >        assertIteratorExhausted(set0().iterator());
446      }
447  
448      /**
449       * iterator.remove removes current element
450       */
451 <    public void testIteratorRemove () {
451 >    public void testIteratorRemove() {
452          final NavigableSet q = set0();
453          q.add(new Integer(2));
454          q.add(new Integer(1));
# Line 452 | Line 459 | public class TreeSubSetTest extends JSR1
459          it.remove();
460  
461          it = q.iterator();
462 <        assertEquals(it.next(), new Integer(2));
463 <        assertEquals(it.next(), new Integer(3));
462 >        assertEquals(2, it.next());
463 >        assertEquals(3, it.next());
464          assertFalse(it.hasNext());
465      }
466  
460
467      /**
468       * toString contains toStrings of elements
469       */
# Line 465 | Line 471 | public class TreeSubSetTest extends JSR1
471          NavigableSet q = populatedSet(SIZE);
472          String s = q.toString();
473          for (int i = 0; i < SIZE; ++i) {
474 <            assertTrue(s.indexOf(String.valueOf(i)) >= 0);
474 >            assertTrue(s.contains(String.valueOf(i)));
475          }
476 <    }        
476 >    }
477  
478      /**
479 <     * A deserialized serialized set has same elements
479 >     * A deserialized/reserialized set equals original
480       */
481 <    public void testSerialization() {
482 <        NavigableSet q = populatedSet(SIZE);
483 <        try {
484 <            ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
485 <            ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
486 <            out.writeObject(q);
487 <            out.close();
488 <
489 <            ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
490 <            ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
491 <            NavigableSet r = (NavigableSet)in.readObject();
486 <            assertEquals(q.size(), r.size());
487 <            while (!q.isEmpty())
488 <                assertEquals(q.pollFirst(), r.pollFirst());
489 <        } catch(Exception e){
490 <            e.printStackTrace();
491 <            unexpectedException();
481 >    public void testSerialization() throws Exception {
482 >        NavigableSet x = populatedSet(SIZE);
483 >        NavigableSet y = serialClone(x);
484 >
485 >        assertNotSame(x, y);
486 >        assertEquals(x.size(), y.size());
487 >        assertEquals(x, y);
488 >        assertEquals(y, x);
489 >        while (!x.isEmpty()) {
490 >            assertFalse(y.isEmpty());
491 >            assertEquals(x.pollFirst(), y.pollFirst());
492          }
493 +        assertTrue(y.isEmpty());
494      }
495  
496      /**
# Line 611 | Line 612 | public class TreeSubSetTest extends JSR1
612          assertEquals(4, set.size());
613      }
614  
615 +    /**
616 +     * size changes when elements added and removed
617 +     */
618 +    public void testDescendingSize() {
619 +        NavigableSet q = populatedSet(SIZE);
620 +        for (int i = 0; i < SIZE; ++i) {
621 +            assertEquals(SIZE - i, q.size());
622 +            q.pollFirst();
623 +        }
624 +        for (int i = 0; i < SIZE; ++i) {
625 +            assertEquals(i, q.size());
626 +            q.add(new Integer(i));
627 +        }
628 +    }
629 +
630 +    /**
631 +     * Add of comparable element succeeds
632 +     */
633 +    public void testDescendingAdd() {
634 +        NavigableSet q = dset0();
635 +        assertTrue(q.add(m6));
636 +    }
637 +
638 +    /**
639 +     * Add of duplicate element fails
640 +     */
641 +    public void testDescendingAddDup() {
642 +        NavigableSet q = dset0();
643 +        assertTrue(q.add(m6));
644 +        assertFalse(q.add(m6));
645 +    }
646 +
647 +    /**
648 +     * Add of non-Comparable throws CCE
649 +     */
650 +    public void testDescendingAddNonComparable() {
651 +        NavigableSet q = dset0();
652 +        try {
653 +            q.add(new Object());
654 +            q.add(new Object());
655 +            shouldThrow();
656 +        } catch (ClassCastException success) {}
657 +    }
658 +
659 +    /**
660 +     * addAll(null) throws NPE
661 +     */
662 +    public void testDescendingAddAll1() {
663 +        NavigableSet q = dset0();
664 +        try {
665 +            q.addAll(null);
666 +            shouldThrow();
667 +        } catch (NullPointerException success) {}
668 +    }
669 +
670 +    /**
671 +     * addAll of a collection with null elements throws NPE
672 +     */
673 +    public void testDescendingAddAll2() {
674 +        NavigableSet q = dset0();
675 +        Integer[] ints = new Integer[SIZE];
676 +        try {
677 +            q.addAll(Arrays.asList(ints));
678 +            shouldThrow();
679 +        } catch (NullPointerException success) {}
680 +    }
681 +
682 +    /**
683 +     * addAll of a collection with any null elements throws NPE after
684 +     * possibly adding some elements
685 +     */
686 +    public void testDescendingAddAll3() {
687 +        NavigableSet q = dset0();
688 +        Integer[] ints = new Integer[SIZE];
689 +        for (int i = 0; i < SIZE - 1; ++i)
690 +            ints[i] = new Integer(i + SIZE);
691 +        try {
692 +            q.addAll(Arrays.asList(ints));
693 +            shouldThrow();
694 +        } catch (NullPointerException success) {}
695 +    }
696 +
697 +    /**
698 +     * Set contains all elements of successful addAll
699 +     */
700 +    public void testDescendingAddAll5() {
701 +        Integer[] empty = new Integer[0];
702 +        Integer[] ints = new Integer[SIZE];
703 +        for (int i = 0; i < SIZE; ++i)
704 +            ints[i] = new Integer(SIZE - 1 - i);
705 +        NavigableSet q = dset0();
706 +        assertFalse(q.addAll(Arrays.asList(empty)));
707 +        assertTrue(q.addAll(Arrays.asList(ints)));
708 +        for (int i = 0; i < SIZE; ++i)
709 +            assertEquals(new Integer(i), q.pollFirst());
710 +    }
711 +
712 +    /**
713 +     * poll succeeds unless empty
714 +     */
715 +    public void testDescendingPoll() {
716 +        NavigableSet q = populatedSet(SIZE);
717 +        for (int i = 0; i < SIZE; ++i) {
718 +            assertEquals(i, q.pollFirst());
719 +        }
720 +        assertNull(q.pollFirst());
721 +    }
722 +
723 +    /**
724 +     * remove(x) removes x and returns true if present
725 +     */
726 +    public void testDescendingRemoveElement() {
727 +        NavigableSet q = populatedSet(SIZE);
728 +        for (int i = 1; i < SIZE; i += 2) {
729 +            assertTrue(q.remove(new Integer(i)));
730 +        }
731 +        for (int i = 0; i < SIZE; i += 2) {
732 +            assertTrue(q.remove(new Integer(i)));
733 +            assertFalse(q.remove(new Integer(i + 1)));
734 +        }
735 +        assertTrue(q.isEmpty());
736 +    }
737 +
738 +    /**
739 +     * contains(x) reports true when elements added but not yet removed
740 +     */
741 +    public void testDescendingContains() {
742 +        NavigableSet q = populatedSet(SIZE);
743 +        for (int i = 0; i < SIZE; ++i) {
744 +            assertTrue(q.contains(new Integer(i)));
745 +            q.pollFirst();
746 +            assertFalse(q.contains(new Integer(i)));
747 +        }
748 +    }
749 +
750 +    /**
751 +     * clear removes all elements
752 +     */
753 +    public void testDescendingClear() {
754 +        NavigableSet q = populatedSet(SIZE);
755 +        q.clear();
756 +        assertTrue(q.isEmpty());
757 +        assertEquals(0, q.size());
758 +        assertTrue(q.add(new Integer(1)));
759 +        assertFalse(q.isEmpty());
760 +        q.clear();
761 +        assertTrue(q.isEmpty());
762 +    }
763 +
764 +    /**
765 +     * containsAll(c) is true when c contains a subset of elements
766 +     */
767 +    public void testDescendingContainsAll() {
768 +        NavigableSet q = populatedSet(SIZE);
769 +        NavigableSet p = dset0();
770 +        for (int i = 0; i < SIZE; ++i) {
771 +            assertTrue(q.containsAll(p));
772 +            assertFalse(p.containsAll(q));
773 +            p.add(new Integer(i));
774 +        }
775 +        assertTrue(p.containsAll(q));
776 +    }
777 +
778 +    /**
779 +     * retainAll(c) retains only those elements of c and reports true if changed
780 +     */
781 +    public void testDescendingRetainAll() {
782 +        NavigableSet q = populatedSet(SIZE);
783 +        NavigableSet p = populatedSet(SIZE);
784 +        for (int i = 0; i < SIZE; ++i) {
785 +            boolean changed = q.retainAll(p);
786 +            if (i == 0)
787 +                assertFalse(changed);
788 +            else
789 +                assertTrue(changed);
790 +
791 +            assertTrue(q.containsAll(p));
792 +            assertEquals(SIZE - i, q.size());
793 +            p.pollFirst();
794 +        }
795 +    }
796 +
797 +    /**
798 +     * removeAll(c) removes only those elements of c and reports true if changed
799 +     */
800 +    public void testDescendingRemoveAll() {
801 +        for (int i = 1; i < SIZE; ++i) {
802 +            NavigableSet q = populatedSet(SIZE);
803 +            NavigableSet p = populatedSet(i);
804 +            assertTrue(q.removeAll(p));
805 +            assertEquals(SIZE - i, q.size());
806 +            for (int j = 0; j < i; ++j) {
807 +                Integer x = (Integer)(p.pollFirst());
808 +                assertFalse(q.contains(x));
809 +            }
810 +        }
811 +    }
812 +
813 +    /**
814 +     * lower returns preceding element
815 +     */
816 +    public void testDescendingLower() {
817 +        NavigableSet q = dset5();
818 +        Object e1 = q.lower(m3);
819 +        assertEquals(m2, e1);
820 +
821 +        Object e2 = q.lower(m6);
822 +        assertEquals(m5, e2);
823 +
824 +        Object e3 = q.lower(m1);
825 +        assertNull(e3);
826 +
827 +        Object e4 = q.lower(zero);
828 +        assertNull(e4);
829 +    }
830 +
831 +    /**
832 +     * higher returns next element
833 +     */
834 +    public void testDescendingHigher() {
835 +        NavigableSet q = dset5();
836 +        Object e1 = q.higher(m3);
837 +        assertEquals(m4, e1);
838 +
839 +        Object e2 = q.higher(zero);
840 +        assertEquals(m1, e2);
841 +
842 +        Object e3 = q.higher(m5);
843 +        assertNull(e3);
844 +
845 +        Object e4 = q.higher(m6);
846 +        assertNull(e4);
847 +    }
848 +
849 +    /**
850 +     * floor returns preceding element
851 +     */
852 +    public void testDescendingFloor() {
853 +        NavigableSet q = dset5();
854 +        Object e1 = q.floor(m3);
855 +        assertEquals(m3, e1);
856 +
857 +        Object e2 = q.floor(m6);
858 +        assertEquals(m5, e2);
859 +
860 +        Object e3 = q.floor(m1);
861 +        assertEquals(m1, e3);
862 +
863 +        Object e4 = q.floor(zero);
864 +        assertNull(e4);
865 +    }
866 +
867 +    /**
868 +     * ceiling returns next element
869 +     */
870 +    public void testDescendingCeiling() {
871 +        NavigableSet q = dset5();
872 +        Object e1 = q.ceiling(m3);
873 +        assertEquals(m3, e1);
874 +
875 +        Object e2 = q.ceiling(zero);
876 +        assertEquals(m1, e2);
877 +
878 +        Object e3 = q.ceiling(m5);
879 +        assertEquals(m5, e3);
880 +
881 +        Object e4 = q.ceiling(m6);
882 +        assertNull(e4);
883 +    }
884 +
885 +    /**
886 +     * toArray contains all elements
887 +     */
888 +    public void testDescendingToArray() {
889 +        NavigableSet q = populatedSet(SIZE);
890 +        Object[] o = q.toArray();
891 +        Arrays.sort(o);
892 +        for (int i = 0; i < o.length; i++)
893 +            assertEquals(o[i], q.pollFirst());
894 +    }
895 +
896 +    /**
897 +     * toArray(a) contains all elements
898 +     */
899 +    public void testDescendingToArray2() {
900 +        NavigableSet q = populatedSet(SIZE);
901 +        Integer[] ints = new Integer[SIZE];
902 +        assertSame(ints, q.toArray(ints));
903 +        Arrays.sort(ints);
904 +        for (int i = 0; i < ints.length; i++)
905 +            assertEquals(ints[i], q.pollFirst());
906 +    }
907 +
908 +    /**
909 +     * iterator iterates through all elements
910 +     */
911 +    public void testDescendingIterator() {
912 +        NavigableSet q = populatedSet(SIZE);
913 +        int i = 0;
914 +        Iterator it = q.iterator();
915 +        while (it.hasNext()) {
916 +            assertTrue(q.contains(it.next()));
917 +            ++i;
918 +        }
919 +        assertEquals(i, SIZE);
920 +    }
921 +
922 +    /**
923 +     * iterator of empty set has no elements
924 +     */
925 +    public void testDescendingEmptyIterator() {
926 +        NavigableSet q = dset0();
927 +        int i = 0;
928 +        Iterator it = q.iterator();
929 +        while (it.hasNext()) {
930 +            assertTrue(q.contains(it.next()));
931 +            ++i;
932 +        }
933 +        assertEquals(0, i);
934 +    }
935 +
936 +    /**
937 +     * iterator.remove removes current element
938 +     */
939 +    public void testDescendingIteratorRemove() {
940 +        final NavigableSet q = dset0();
941 +        q.add(new Integer(2));
942 +        q.add(new Integer(1));
943 +        q.add(new Integer(3));
944 +
945 +        Iterator it = q.iterator();
946 +        it.next();
947 +        it.remove();
948 +
949 +        it = q.iterator();
950 +        assertEquals(2, it.next());
951 +        assertEquals(3, it.next());
952 +        assertFalse(it.hasNext());
953 +    }
954 +
955 +    /**
956 +     * toString contains toStrings of elements
957 +     */
958 +    public void testDescendingToString() {
959 +        NavigableSet q = populatedSet(SIZE);
960 +        String s = q.toString();
961 +        for (int i = 0; i < SIZE; ++i) {
962 +            assertTrue(s.contains(String.valueOf(i)));
963 +        }
964 +    }
965 +
966 +    /**
967 +     * A deserialized/reserialized set equals original
968 +     */
969 +    public void testDescendingSerialization() throws Exception {
970 +        NavigableSet x = dset5();
971 +        NavigableSet y = serialClone(x);
972 +
973 +        assertNotSame(x, y);
974 +        assertEquals(x.size(), y.size());
975 +        assertEquals(x.toString(), y.toString());
976 +        assertEquals(x, y);
977 +        assertEquals(y, x);
978 +        while (!x.isEmpty()) {
979 +            assertFalse(y.isEmpty());
980 +            assertEquals(x.pollFirst(), y.pollFirst());
981 +        }
982 +        assertTrue(y.isEmpty());
983 +    }
984 +
985 +    /**
986 +     * subSet returns set with keys in requested range
987 +     */
988 +    public void testDescendingSubSetContents() {
989 +        NavigableSet set = dset5();
990 +        SortedSet sm = set.subSet(m2, m4);
991 +        assertEquals(m2, sm.first());
992 +        assertEquals(m3, sm.last());
993 +        assertEquals(2, sm.size());
994 +        assertFalse(sm.contains(m1));
995 +        assertTrue(sm.contains(m2));
996 +        assertTrue(sm.contains(m3));
997 +        assertFalse(sm.contains(m4));
998 +        assertFalse(sm.contains(m5));
999 +        Iterator i = sm.iterator();
1000 +        Object k;
1001 +        k = (Integer)(i.next());
1002 +        assertEquals(m2, k);
1003 +        k = (Integer)(i.next());
1004 +        assertEquals(m3, k);
1005 +        assertFalse(i.hasNext());
1006 +        Iterator j = sm.iterator();
1007 +        j.next();
1008 +        j.remove();
1009 +        assertFalse(set.contains(m2));
1010 +        assertEquals(4, set.size());
1011 +        assertEquals(1, sm.size());
1012 +        assertEquals(m3, sm.first());
1013 +        assertEquals(m3, sm.last());
1014 +        assertTrue(sm.remove(m3));
1015 +        assertTrue(sm.isEmpty());
1016 +        assertEquals(3, set.size());
1017 +    }
1018 +
1019 +    public void testDescendingSubSetContents2() {
1020 +        NavigableSet set = dset5();
1021 +        SortedSet sm = set.subSet(m2, m3);
1022 +        assertEquals(1, sm.size());
1023 +        assertEquals(m2, sm.first());
1024 +        assertEquals(m2, sm.last());
1025 +        assertFalse(sm.contains(m1));
1026 +        assertTrue(sm.contains(m2));
1027 +        assertFalse(sm.contains(m3));
1028 +        assertFalse(sm.contains(m4));
1029 +        assertFalse(sm.contains(m5));
1030 +        Iterator i = sm.iterator();
1031 +        Object k;
1032 +        k = (Integer)(i.next());
1033 +        assertEquals(m2, k);
1034 +        assertFalse(i.hasNext());
1035 +        Iterator j = sm.iterator();
1036 +        j.next();
1037 +        j.remove();
1038 +        assertFalse(set.contains(m2));
1039 +        assertEquals(4, set.size());
1040 +        assertEquals(0, sm.size());
1041 +        assertTrue(sm.isEmpty());
1042 +        assertFalse(sm.remove(m3));
1043 +        assertEquals(4, set.size());
1044 +    }
1045 +
1046 +    /**
1047 +     * headSet returns set with keys in requested range
1048 +     */
1049 +    public void testDescendingHeadSetContents() {
1050 +        NavigableSet set = dset5();
1051 +        SortedSet sm = set.headSet(m4);
1052 +        assertTrue(sm.contains(m1));
1053 +        assertTrue(sm.contains(m2));
1054 +        assertTrue(sm.contains(m3));
1055 +        assertFalse(sm.contains(m4));
1056 +        assertFalse(sm.contains(m5));
1057 +        Iterator i = sm.iterator();
1058 +        Object k;
1059 +        k = (Integer)(i.next());
1060 +        assertEquals(m1, k);
1061 +        k = (Integer)(i.next());
1062 +        assertEquals(m2, k);
1063 +        k = (Integer)(i.next());
1064 +        assertEquals(m3, k);
1065 +        assertFalse(i.hasNext());
1066 +        sm.clear();
1067 +        assertTrue(sm.isEmpty());
1068 +        assertEquals(2, set.size());
1069 +        assertEquals(m4, set.first());
1070 +    }
1071 +
1072 +    /**
1073 +     * tailSet returns set with keys in requested range
1074 +     */
1075 +    public void testDescendingTailSetContents() {
1076 +        NavigableSet set = dset5();
1077 +        SortedSet sm = set.tailSet(m2);
1078 +        assertFalse(sm.contains(m1));
1079 +        assertTrue(sm.contains(m2));
1080 +        assertTrue(sm.contains(m3));
1081 +        assertTrue(sm.contains(m4));
1082 +        assertTrue(sm.contains(m5));
1083 +        Iterator i = sm.iterator();
1084 +        Object k;
1085 +        k = (Integer)(i.next());
1086 +        assertEquals(m2, k);
1087 +        k = (Integer)(i.next());
1088 +        assertEquals(m3, k);
1089 +        k = (Integer)(i.next());
1090 +        assertEquals(m4, k);
1091 +        k = (Integer)(i.next());
1092 +        assertEquals(m5, k);
1093 +        assertFalse(i.hasNext());
1094 +
1095 +        SortedSet ssm = sm.tailSet(m4);
1096 +        assertEquals(m4, ssm.first());
1097 +        assertEquals(m5, ssm.last());
1098 +        assertTrue(ssm.remove(m4));
1099 +        assertEquals(1, ssm.size());
1100 +        assertEquals(3, sm.size());
1101 +        assertEquals(4, set.size());
1102 +    }
1103 +
1104 +    /**
1105 +     * addAll is idempotent
1106 +     */
1107 +    public void testAddAll_idempotent() throws Exception {
1108 +        Set x = populatedSet(SIZE);
1109 +        Set y = new TreeSet(x);
1110 +        y.addAll(x);
1111 +        assertEquals(x, y);
1112 +        assertEquals(y, x);
1113 +    }
1114 +
1115   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines