ConcurrentSkipListSubSetTest.java revision 8f0d92bba199d906c70a5e40d7f3516c1a424117
18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/*
28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166
38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at
48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/
58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */
68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166;
88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport junit.framework.*;
108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Arrays;
118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.BitSet;
128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Collection;
138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Comparator;
148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Iterator;
158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NavigableSet;
168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NoSuchElementException;
178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Random;
188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Set;
198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.SortedSet;
208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ConcurrentSkipListSet;
218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ConcurrentSkipListSubSetTest extends JSR166TestCase {
238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static class MyReverseComparator implements Comparator {
258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public int compare(Object x, Object y) {
268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            return ((Comparable)y).compareTo(x);
278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new set of given size containing consecutive
328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Integers 0 ... n.
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private NavigableSet<Integer> populatedSet(int n) {
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListSet<Integer> q =
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            new ConcurrentSkipListSet<Integer>();
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = n-1; i >= 0; i-=2)
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.add(new Integer(i)));
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = (n & 1); i < n; i+=2)
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.add(new Integer(i)));
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(new Integer(-n)));
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(new Integer(n)));
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet s = q.subSet(new Integer(0), true, new Integer(n), false);
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s.isEmpty());
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(n, s.size());
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return s;
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new set of first 5 ints.
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private NavigableSet set5() {
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListSet q = new ConcurrentSkipListSet();
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(one);
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(two);
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(three);
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(four);
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(five);
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(zero);
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(seven);
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet s = q.subSet(one, true, seven, false);
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return s;
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new set of first 5 negative ints.
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private NavigableSet dset5() {
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListSet q = new ConcurrentSkipListSet();
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(m1);
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(m2);
778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(m3);
788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(m4);
798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(m5);
808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet s = q.descendingSet();
818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return s;
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private static NavigableSet set0() {
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListSet set = new ConcurrentSkipListSet();
878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(set.isEmpty());
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return set.tailSet(m1, true);
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private static NavigableSet dset0() {
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListSet set = new ConcurrentSkipListSet();
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(set.isEmpty());
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return set;
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A new set has unbounded capacity
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor1() {
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, set0().size());
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * isEmpty is true before add, false after
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEmpty() {
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set0();
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(2));
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.pollFirst();
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.pollFirst();
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size changes when elements added and removed
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSize() {
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(SIZE-i, q.size());
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.pollFirst();
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.size());
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(i));
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add(null) throws NPE
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddNull() {
1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = set0();
1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(null);
1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Add of comparable element succeeds
1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAdd() {
1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set0();
1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(six));
1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Add of duplicate element fails
1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddDup() {
1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set0();
1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(six));
1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.add(six));
1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Add of non-Comparable throws CCE
1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddNonComparable() {
1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = set0();
1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Object());
1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Object());
1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Object());
1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (ClassCastException success) {}
1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll(null) throws NPE
1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll1() {
1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = set0();
1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(null);
1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with null elements throws NPE
1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll2() {
1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = set0();
1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer[] ints = new Integer[SIZE];
1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(Arrays.asList(ints));
1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with any null elements throws NPE after
1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * possibly adding some elements
2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll3() {
2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = set0();
2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer[] ints = new Integer[SIZE];
2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int i = 0; i < SIZE-1; ++i)
2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                ints[i] = new Integer(i+SIZE);
2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(Arrays.asList(ints));
2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Set contains all elements of successful addAll
2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll5() {
2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] empty = new Integer[0];
2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(SIZE-1- i);
2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set0();
2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.addAll(Arrays.asList(empty)));
2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.addAll(Arrays.asList(ints)));
2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(new Integer(i), q.pollFirst());
2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * poll succeeds unless empty
2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPoll() {
2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollFirst());
2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.pollFirst());
2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(x) removes x and returns true if present
2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveElement() {
2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i < SIZE; i+=2) {
2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i-1));
2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i+=2) {
2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.remove(i+1));
2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i+1));
2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * contains(x) reports true when elements added but not yet removed
2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContains() {
2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(new Integer(i)));
2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.pollFirst();
2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(new Integer(i)));
2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all elements
2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testClear() {
2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, q.size());
2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsAll(c) is true when c contains a subset of elements
2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsAll() {
2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet p = set0();
2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(p.containsAll(q));
2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.add(new Integer(i));
2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(p.containsAll(q));
2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * retainAll(c) retains only those elements of c and reports true if changed
3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRetainAll() {
3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet p = populatedSet(SIZE);
3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            boolean changed = q.retainAll(p);
3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            if (i == 0)
3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertFalse(changed);
3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            else
3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertTrue(changed);
3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(SIZE-i, q.size());
3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.pollFirst();
3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeAll(c) removes only those elements of c and reports true if changed
3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveAll() {
3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i < SIZE; ++i) {
3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = populatedSet(SIZE);
3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet p = populatedSet(i);
3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeAll(p));
3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(SIZE-i, q.size());
3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 0; j < i; ++j) {
3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                Integer I = (Integer)(p.pollFirst());
3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertFalse(q.contains(I));
3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * lower returns preceding element
3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testLower() {
3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set5();
3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.lower(three);
3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, e1);
3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.lower(six);
3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e2);
3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.lower(one);
3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.lower(zero);
3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * higher returns next element
3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testHigher() {
3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set5();
3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.higher(three);
3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, e1);
3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.higher(zero);
3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e2);
3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.higher(five);
3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.higher(six);
3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * floor returns preceding element
3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testFloor() {
3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set5();
3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.floor(three);
3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, e1);
3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.floor(six);
3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e2);
3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.floor(one);
3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e3);
3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.floor(zero);
3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * ceiling returns next element
3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testCeiling() {
3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set5();
3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.ceiling(three);
3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, e1);
3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.ceiling(zero);
3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e2);
3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.ceiling(five);
4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e3);
4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.ceiling(six);
4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray contains all elements in sorted order
4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray() {
4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] o = q.toArray();
4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < o.length; i++)
4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(o[i], q.pollFirst());
4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(a) contains all elements in sorted order
4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray2() {
4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet<Integer> q = populatedSet(SIZE);
4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] array = q.toArray(ints);
4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(ints, array);
4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < ints.length; i++)
4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(ints[i], q.pollFirst());
4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator iterates through all elements
4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIterator() {
4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int i = 0;
4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ++i;
4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(i, SIZE);
4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator of empty set has no elements
4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEmptyIterator() {
4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = set0();
4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int i = 0;
4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ++i;
4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, i);
4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator.remove removes current element
4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIteratorRemove() {
4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final NavigableSet q = set0();
4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(2));
4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(3));
4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.next();
4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.remove();
4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it = q.iterator();
4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(it.next(), new Integer(2));
4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(it.next(), new Integer(3));
4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(it.hasNext());
4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString contains toStrings of elements
4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToString() {
4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = q.toString();
4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized serialized set has same elements
4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSerialization() throws Exception {
4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet x = populatedSet(SIZE);
4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet y = serialClone(x);
4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(y, x);
4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x, y);
4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(y, x);
4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (!x.isEmpty()) {
4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(y.isEmpty());
4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(x.pollFirst(), y.pollFirst());
5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(y.isEmpty());
5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * subSet returns set with keys in requested range
5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSubSetContents() {
5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = set5();
5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.subSet(two, four);
5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, sm.first());
5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, sm.last());
5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, sm.size());
5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(one));
5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(two));
5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(three));
5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(four));
5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(five));
5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, k);
5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.iterator();
5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(set.contains(two));
5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, sm.first());
5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, sm.last());
5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.remove(three));
5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, set.size());
5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSubSetContents2() {
5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = set5();
5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.subSet(two, three);
5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, sm.first());
5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, sm.last());
5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(one));
5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(two));
5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(three));
5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(four));
5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(five));
5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.iterator();
5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(set.contains(two));
5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, sm.size());
5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.remove(three));
5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * headSet returns set with keys in requested range
5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testHeadSetContents() {
5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = set5();
5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.headSet(four);
5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(one));
5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(two));
5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(three));
5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(four));
5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(five));
5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, k);
5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, k);
5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        sm.clear();
5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, set.size());
5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, set.first());
5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * tailSet returns set with keys in requested range
5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testTailSetContents() {
5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = set5();
5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.tailSet(two);
5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(one));
5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(two));
5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(three));
6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(four));
6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(five));
6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, k);
6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, k);
6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, k);
6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet ssm = sm.tailSet(four);
6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, ssm.first());
6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, ssm.last());
6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(ssm.remove(four));
6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, ssm.size());
6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, sm.size());
6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size changes when elements added and removed
6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSize() {
6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(SIZE-i, q.size());
6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.pollFirst();
6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.size());
6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(i));
6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add(null) throws NPE
6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAddNull() {
6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = dset0();
6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(null);
6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Add of comparable element succeeds
6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAdd() {
6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset0();
6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(m6));
6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Add of duplicate element fails
6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAddDup() {
6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset0();
6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(m6));
6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.add(m6));
6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Add of non-Comparable throws CCE
6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAddNonComparable() {
6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = dset0();
6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Object());
6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Object());
6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Object());
6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (ClassCastException success) {}
6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll(null) throws NPE
6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAddAll1() {
6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = dset0();
6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(null);
6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with null elements throws NPE
6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAddAll2() {
6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = dset0();
6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer[] ints = new Integer[SIZE];
6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(Arrays.asList(ints));
6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with any null elements throws NPE after
7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * possibly adding some elements
7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAddAll3() {
7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = dset0();
7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer[] ints = new Integer[SIZE];
7108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int i = 0; i < SIZE-1; ++i)
7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                ints[i] = new Integer(i+SIZE);
7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(Arrays.asList(ints));
7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
7148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Set contains all elements of successful addAll
7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAddAll5() {
7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] empty = new Integer[0];
7228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(SIZE-1- i);
7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset0();
7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.addAll(Arrays.asList(empty)));
7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.addAll(Arrays.asList(ints)));
7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(new Integer(i), q.pollFirst());
7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * poll succeeds unless empty
7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPoll() {
7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollFirst());
7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.pollFirst());
7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(x) removes x and returns true if present
7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingRemoveElement() {
7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
7488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i < SIZE; i+=2) {
7498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(new Integer(i)));
7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i+=2) {
7528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(new Integer(i)));
7538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.remove(new Integer(i+1)));
7548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
7568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * contains(x) reports true when elements added but not yet removed
7608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingContains() {
7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(new Integer(i)));
7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.pollFirst();
7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(new Integer(i)));
7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all elements
7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingClear() {
7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, q.size());
7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsAll(c) is true when c contains a subset of elements
7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingContainsAll() {
7888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet p = dset0();
7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(p.containsAll(q));
7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.add(new Integer(i));
7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(p.containsAll(q));
7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * retainAll(c) retains only those elements of c and reports true if changed
8008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingRetainAll() {
8028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
8038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet p = populatedSet(SIZE);
8048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
8058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            boolean changed = q.retainAll(p);
8068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            if (i == 0)
8078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertFalse(changed);
8088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            else
8098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertTrue(changed);
8108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
8128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(SIZE-i, q.size());
8138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.pollFirst();
8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeAll(c) removes only those elements of c and reports true if changed
8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingRemoveAll() {
8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i < SIZE; ++i) {
8228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet q = populatedSet(SIZE);
8238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            NavigableSet p = populatedSet(i);
8248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeAll(p));
8258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(SIZE-i, q.size());
8268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 0; j < i; ++j) {
8278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                Integer I = (Integer)(p.pollFirst());
8288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertFalse(q.contains(I));
8298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
8308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * lower returns preceding element
8358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingLower() {
8378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset5();
8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.lower(m3);
8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, e1);
8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.lower(m6);
8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e2);
8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.lower(m1);
8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.lower(zero);
8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * higher returns next element
8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingHigher() {
8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset5();
8568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.higher(m3);
8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, e1);
8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.higher(zero);
8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e2);
8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.higher(m5);
8638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.higher(m6);
8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
8678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * floor returns preceding element
8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingFloor() {
8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset5();
8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.floor(m3);
8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, e1);
8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.floor(m6);
8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e2);
8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.floor(m1);
8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e3);
8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.floor(zero);
8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * ceiling returns next element
8898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingCeiling() {
8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset5();
8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e1 = q.ceiling(m3);
8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, e1);
8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e2 = q.ceiling(zero);
8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e2);
8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e3 = q.ceiling(m5);
8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e3);
9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object e4 = q.ceiling(m6);
9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray contains all elements
9078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingToArray() {
9098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
9108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] o = q.toArray();
9118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Arrays.sort(o);
9128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < o.length; i++)
9138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(o[i], q.pollFirst());
9148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(a) contains all elements
9188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingToArray2() {
9208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
9218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
9228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(ints, q.toArray(ints));
9238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Arrays.sort(ints);
9248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < ints.length; i++)
9258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(ints[i], q.pollFirst());
9268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator iterates through all elements
9308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingIterator() {
9328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
9338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int i = 0;
9348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
9358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
9368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
9378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ++i;
9388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
9398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(i, SIZE);
9408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator of empty set has no elements
9448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingEmptyIterator() {
9468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = dset0();
9478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int i = 0;
9488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
9498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
9508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
9518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ++i;
9528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
9538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, i);
9548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator.remove removes current element
9588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingIteratorRemove() {
9608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final NavigableSet q = dset0();
9618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(2));
9628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
9638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(3));
9648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
9668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.next();
9678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.remove();
9688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it = q.iterator();
9708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(it.next(), new Integer(2));
9718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(it.next(), new Integer(3));
9728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(it.hasNext());
9738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString contains toStrings of elements
9778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingToString() {
9798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet q = populatedSet(SIZE);
9808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = q.toString();
9818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
9828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
9838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
9848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized serialized set has same elements
9888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSerialization() throws Exception {
9908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet x = dset5();
9918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet y = serialClone(x);
9928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(y, x);
9948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
9958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x, y);
9968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(y, x);
9978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (!x.isEmpty()) {
9988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(y.isEmpty());
9998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(x.pollFirst(), y.pollFirst());
10008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
10018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(y.isEmpty());
10028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * subSet returns set with keys in requested range
10068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSubSetContents() {
10088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = dset5();
10098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.subSet(m2, m4);
10108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, sm.first());
10118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, sm.last());
10128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, sm.size());
10138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m1));
10148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m2));
10158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m3));
10168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m4));
10178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m5));
10188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
10198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
10208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
10218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
10228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
10238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, k);
10248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
10258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.iterator();
10268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
10278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
10288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(set.contains(m2));
10298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
10308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
10318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, sm.first());
10328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, sm.last());
10338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.remove(m3));
10348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
10358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, set.size());
10368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSubSetContents2() {
10398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = dset5();
10408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.subSet(m2, m3);
10418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
10428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, sm.first());
10438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, sm.last());
10448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m1));
10458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m2));
10468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m3));
10478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m4));
10488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m5));
10498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
10508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
10518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
10528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
10538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
10548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.iterator();
10558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
10568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
10578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(set.contains(m2));
10588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
10598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, sm.size());
10608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
10618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.remove(m3));
10628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
10638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * headSet returns set with keys in requested range
10678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingHeadSetContents() {
10698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = dset5();
10708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.headSet(m4);
10718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m1));
10728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m2));
10738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m3));
10748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m4));
10758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m5));
10768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
10778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
10788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
10798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, k);
10808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
10818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
10828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
10838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, k);
10848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
10858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        sm.clear();
10868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
10878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, set.size());
10888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, set.first());
10898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * tailSet returns set with keys in requested range
10938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingTailSetContents() {
10958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableSet set = dset5();
10968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet sm = set.tailSet(m2);
10978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.contains(m1));
10988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m2));
10998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m3));
11008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m4));
11018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.contains(m5));
11028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.iterator();
11038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
11048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
11058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
11068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
11078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, k);
11088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
11098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, k);
11108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
11118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, k);
11128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
11138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedSet ssm = sm.tailSet(m4);
11158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, ssm.first());
11168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, ssm.last());
11178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(ssm.remove(m4));
11188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, ssm.size());
11198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, sm.size());
11208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, set.size());
11218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
11228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
1124