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
98e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.ArrayList;
108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Arrays;
118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Collection;
128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Iterator;
138e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Map;
148e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.NavigableMap;
158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Set;
168e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.SortedMap;
178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ConcurrentNavigableMap;
188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ConcurrentSkipListMap;
198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test;
218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite;
228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ConcurrentSkipListSubMapTest extends JSR166TestCase {
248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // android-note: Removed because the CTS runner does a bad job of
258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // retrying tests that have suite() declarations.
268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //
278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static void main(String[] args) {
288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //     main(suite(), args);
298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static Test suite() {
31e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak    //     return new TestSuite(ConcurrentSkipListSubMapTest.class);
328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new map from Integers 1-5 to Strings "A"-"E".
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private static ConcurrentNavigableMap map5() {
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListMap map = new ConcurrentSkipListMap();
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.isEmpty());
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(zero, "Z");
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(one, "A");
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(five, "E");
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(three, "C");
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(two, "B");
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(four, "D");
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(seven, "F");
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.isEmpty());
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(7, map.size());
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return map.subMap(one, true, seven, false);
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new map from Integers -5 to -1 to Strings "A"-"E".
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private static ConcurrentNavigableMap dmap5() {
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListMap map = new ConcurrentSkipListMap();
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.isEmpty());
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(m1, "A");
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(m5, "E");
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(m3, "C");
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(m2, "B");
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(m4, "D");
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.isEmpty());
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, map.size());
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return map.descendingMap();
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private static ConcurrentNavigableMap map0() {
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListMap map = new ConcurrentSkipListMap();
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.isEmpty());
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return map.tailMap(one, true);
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private static ConcurrentNavigableMap dmap0() {
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentSkipListMap map = new ConcurrentSkipListMap();
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.isEmpty());
778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return map;
788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all pairs
828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testClear() {
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.clear();
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, map.size());
878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Maps with same contents are equal
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEquals() {
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map1 = map5();
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map2 = map5();
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(map1, map2);
968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(map2, map1);
978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map1.clear();
988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map1.equals(map2));
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map2.equals(map1));
1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsKey returns true for contained key
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsKey() {
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(one));
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(zero));
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsValue returns true for held values
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsValue() {
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsValue("A"));
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsValue("Z"));
1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get returns the correct element at the given key,
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * or null if not present
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGet() {
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", (String)map.get(one));
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = map0();
1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(empty.get(one));
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * isEmpty is true of empty map and false for non-empty
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIsEmpty() {
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = map0();
1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.isEmpty());
1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.isEmpty());
1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * firstKey returns first key
1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testFirstKey() {
1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, map.firstKey());
1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * lastKey returns last key
1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testLastKey() {
1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, map.lastKey());
1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet returns a Set containing all the keys
1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testKeySet() {
1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(one));
1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(two));
1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(three));
1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(four));
1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(five));
1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet is ordered
1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testKeySetOrder() {
1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = s.iterator();
1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer last = (Integer)i.next();
1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(last, one);
1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (i.hasNext()) {
1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer k = (Integer)i.next();
1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(last.compareTo(k) < 0);
1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            last = k;
1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * values collection contains all values
1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testValues() {
1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Collection s = map.values();
1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("A"));
1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("B"));
1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("C"));
1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("D"));
1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("E"));
1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet.toArray returns contains all keys
2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testKeySetToArray() {
2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = s.toArray();
2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.containsAll(Arrays.asList(ar)));
2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ar[0] = m10;
2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s.containsAll(Arrays.asList(ar)));
2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * descendingkeySet.toArray returns contains all keys
2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingKeySetToArray() {
2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.descendingKeySet();
2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = s.toArray();
2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.containsAll(Arrays.asList(ar)));
2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ar[0] = m10;
2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s.containsAll(Arrays.asList(ar)));
2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Values.toArray contains all values
2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testValuesToArray() {
2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Collection v = map.values();
2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = v.toArray();
2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayList s = new ArrayList(Arrays.asList(ar));
2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("A"));
2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("B"));
2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("C"));
2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("D"));
2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("E"));
2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * entrySet contains all pairs
2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEntrySet() {
2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.entrySet();
2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = s.iterator();
2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Map.Entry e = (Map.Entry) it.next();
2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(
2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(one) && e.getValue().equals("A")) ||
2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(two) && e.getValue().equals("B")) ||
2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(three) && e.getValue().equals("C")) ||
2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(four) && e.getValue().equals("D")) ||
2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(five) && e.getValue().equals("E")));
2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putAll adds all key-value pairs from the given map
2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutAll() {
2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = map0();
2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        empty.putAll(map);
2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, empty.size());
2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(one));
2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(two));
2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(three));
2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(four));
2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(five));
2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent works when the given key is not present
2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutIfAbsent() {
2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.putIfAbsent(six, "Z");
2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(six));
2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent does not add the pair if the key is already present
2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutIfAbsent2() {
2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.putIfAbsent(one, "Z"));
2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace fails when the given key is not present
2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplace() {
2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(map.replace(six, "Z"));
3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(six));
3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace succeeds if the key is already present
3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplace2() {
3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotNull(map.replace(one, "Z"));
3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("Z", map.get(one));
3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace value fails when the given key not mapped to expected value
3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue() {
3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(one));
3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.replace(one, "Z", "Z"));
3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(one));
3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace value succeeds when the given key mapped to expected value
3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue2() {
3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(one));
3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.replace(one, "A", "Z"));
3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("Z", map.get(one));
3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove removes the correct key-value pair from the map
3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove() {
3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(five);
3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(five));
3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(key,value) removes only if pair present
3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove2() {
3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(five));
3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", map.get(five));
3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(five, "E");
3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(five));
3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(four, "A");
3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(four));
3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * lowerEntry returns preceding entry.
3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testLowerEntry() {
3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.lowerEntry(three);
3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, e1.getKey());
3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.lowerEntry(six);
3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e2.getKey());
3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.lowerEntry(one);
3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.lowerEntry(zero);
3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * higherEntry returns next entry.
3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testHigherEntry() {
3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.higherEntry(three);
3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, e1.getKey());
3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.higherEntry(zero);
3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e2.getKey());
3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.higherEntry(five);
3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.higherEntry(six);
3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * floorEntry returns preceding entry.
3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testFloorEntry() {
3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.floorEntry(three);
3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, e1.getKey());
4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.floorEntry(six);
4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e2.getKey());
4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.floorEntry(one);
4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e3.getKey());
4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.floorEntry(zero);
4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * ceilingEntry returns next entry.
4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testCeilingEntry() {
4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.ceilingEntry(three);
4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, e1.getKey());
4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.ceilingEntry(zero);
4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e2.getKey());
4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.ceilingEntry(five);
4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e3.getKey());
4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.ceilingEntry(six);
4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * pollFirstEntry returns entries in order
4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPollFirstEntry() {
4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = map.pollFirstEntry();
4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e.getKey());
4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", e.getValue());
4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, e.getKey());
4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(one, "A");
4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e.getKey());
4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", e.getValue());
4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, e.getKey());
4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(four);
4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e.getKey());
4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            e.setValue("A");
4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (UnsupportedOperationException success) {}
4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e);
4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * pollLastEntry returns entries in order
4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPollLastEntry() {
4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = map.pollLastEntry();
4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e.getKey());
4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", e.getValue());
4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, e.getKey());
4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(five, "E");
4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e.getKey());
4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", e.getValue());
4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, e.getKey());
4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(two);
4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, e.getKey());
4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            e.setValue("E");
4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (UnsupportedOperationException success) {}
4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e);
4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size returns the correct values
4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSize() {
4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = map0();
4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, empty.size());
4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, map.size());
4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString contains toString of elements
4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToString() {
4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = map.toString();
4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i <= 5; ++i) {
5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    // Exception tests
5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get(null) of nonempty map throws NPE
5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGet_NullPointerException() {
5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.get(null);
5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsKey(null) of nonempty map throws NPE
5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsKey_NullPointerException() {
5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.containsKey(null);
5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsValue(null) throws NPE
5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsValue_NullPointerException() {
5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map0();
5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.containsValue(null);
5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * put(null,x) throws NPE
5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPut1_NullPointerException() {
5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.put(null, "whatever");
5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent(null, x) throws NPE
5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutIfAbsent1_NullPointerException() {
5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.putIfAbsent(null, "whatever");
5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(null, x) throws NPE
5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplace_NullPointerException() {
5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace(null, "whatever");
5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(null, x, y) throws NPE
5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue_NullPointerException() {
5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace(null, one, "whatever");
5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(null) throws NPE
5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove1_NullPointerException() {
5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.remove(null);
5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(null, x) throws NPE
5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove2_NullPointerException() {
5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = map5();
6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.remove(null, "whatever");
6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized map equals original
6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSerialization() throws Exception {
6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableMap x = map5();
6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableMap y = serialClone(x);
6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(x, y);
6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.toString(), y.toString());
6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x, y);
6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(y, x);
6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * subMap returns map with keys in requested range
6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSubMapContents() {
6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.subMap(two, four);
6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, sm.firstKey());
6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, sm.lastKey());
6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, sm.size());
6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(one));
6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(two));
6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(three));
6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(four));
6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(five));
6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, k);
6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.keySet().iterator();
6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(two));
6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, sm.firstKey());
6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, sm.lastKey());
6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("C", sm.remove(three));
6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, map.size());
6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSubMapContents2() {
6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.subMap(two, three);
6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, sm.firstKey());
6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, sm.lastKey());
6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(one));
6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(two));
6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(three));
6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(four));
6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(five));
6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.keySet().iterator();
6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(two));
6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, sm.size());
6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(sm.remove(three), null);
6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * headMap returns map with keys in requested range
6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testHeadMapContents() {
6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.headMap(four);
6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(one));
6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(two));
6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(three));
6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(four));
6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(five));
6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(one, k);
6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, k);
6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        sm.clear();
7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, map.size());
7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, map.firstKey());
7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * headMap returns map with keys in requested range
7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testTailMapContents() {
7108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = map5();
7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.tailMap(two);
7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(one));
7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(two));
7148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(three));
7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(four));
7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(five));
7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, k);
7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
7228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, k);
7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, k);
7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, k);
7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator ei = sm.entrySet().iterator();
7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e;
7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(two, e.getKey());
7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("B", e.getValue());
7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(three, e.getKey());
7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("C", e.getValue());
7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, e.getKey());
7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("D", e.getValue());
7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, e.getKey());
7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", e.getValue());
7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap ssm = sm.tailMap(four);
7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(four, ssm.firstKey());
7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(five, ssm.lastKey());
7488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("D", ssm.remove(four));
7498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, ssm.size());
7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, sm.size());
7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
7528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all pairs
7568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingClear() {
7588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
7598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.clear();
7608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, map.size());
7618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Maps with same contents are equal
7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingEquals() {
7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map1 = dmap5();
7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map2 = dmap5();
7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(map1, map2);
7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(map2, map1);
7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map1.clear();
7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map1.equals(map2));
7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map2.equals(map1));
7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsKey returns true for contained key
7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingContainsKey() {
7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(m1));
7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(zero));
7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsValue returns true for held values
7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingContainsValue() {
7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsValue("A"));
7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsValue("Z"));
7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get returns the correct element at the given key,
7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * or null if not present
7978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingGet() {
7998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", (String)map.get(m1));
8018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = dmap0();
8028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(empty.get(m1));
8038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * isEmpty is true of empty map and false for non-empty
8078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingIsEmpty() {
8098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = dmap0();
8108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.isEmpty());
8128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.isEmpty());
8138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * firstKey returns first key
8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingFirstKey() {
8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, map.firstKey());
8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * lastKey returns last key
8258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingLastKey() {
8278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, map.lastKey());
8298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet returns a Set containing all the keys
8338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingKeySet() {
8358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
8378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(m1));
8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(m2));
8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(m3));
8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(m4));
8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(m5));
8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet is ordered
8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingKeySetOrder() {
8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = s.iterator();
8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer last = (Integer)i.next();
8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(last, m1);
8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (i.hasNext()) {
8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer k = (Integer)i.next();
8568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(last.compareTo(k) > 0);
8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            last = k;
8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * values collection contains all values
8638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingValues() {
8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Collection s = map.values();
8678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("A"));
8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("B"));
8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("C"));
8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("D"));
8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("E"));
8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet.toArray returns contains all keys
8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingAscendingKeySetToArray() {
8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = s.toArray();
8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.containsAll(Arrays.asList(ar)));
8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ar[0] = m10;
8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s.containsAll(Arrays.asList(ar)));
8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * descendingkeySet.toArray returns contains all keys
8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingDescendingKeySetToArray() {
8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.descendingKeySet();
8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = s.toArray();
8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.containsAll(Arrays.asList(ar)));
8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ar[0] = m10;
8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s.containsAll(Arrays.asList(ar)));
8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Values.toArray contains all values
9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingValuesToArray() {
9058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Collection v = map.values();
9078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = v.toArray();
9088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayList s = new ArrayList(Arrays.asList(ar));
9098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
9108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("A"));
9118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("B"));
9128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("C"));
9138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("D"));
9148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("E"));
9158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * entrySet contains all pairs
9198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingEntrySet() {
9218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.entrySet();
9238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
9248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = s.iterator();
9258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
9268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Map.Entry e = (Map.Entry) it.next();
9278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(
9288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(m1) && e.getValue().equals("A")) ||
9298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(m2) && e.getValue().equals("B")) ||
9308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(m3) && e.getValue().equals("C")) ||
9318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(m4) && e.getValue().equals("D")) ||
9328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(m5) && e.getValue().equals("E")));
9338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
9348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putAll adds all key-value pairs from the given map
9388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPutAll() {
9408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = dmap0();
9418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        empty.putAll(map);
9438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, empty.size());
9448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(m1));
9458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(m2));
9468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(m3));
9478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(m4));
9488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(m5));
9498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent works when the given key is not present
9538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPutIfAbsent() {
9558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.putIfAbsent(six, "Z");
9578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(six));
9588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent does not add the pair if the key is already present
9628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPutIfAbsent2() {
9648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.putIfAbsent(m1, "Z"));
9668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace fails when the given key is not present
9708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingReplace() {
9728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(map.replace(six, "Z"));
9748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(six));
9758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace succeeds if the key is already present
9798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingReplace2() {
9818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotNull(map.replace(m1, "Z"));
9838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("Z", map.get(m1));
9848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace value fails when the given key not mapped to expected value
9888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingReplaceValue() {
9908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
9918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(m1));
9928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.replace(m1, "Z", "Z"));
9938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(m1));
9948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
9978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace value succeeds when the given key mapped to expected value
9988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
9998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingReplaceValue2() {
10008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
10018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(m1));
10028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.replace(m1, "A", "Z"));
10038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("Z", map.get(m1));
10048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove removes the correct key-value pair from the map
10088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingRemove() {
10108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
10118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(m5);
10128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
10138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(m5));
10148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(key,value) removes only if pair present
10188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingRemove2() {
10208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
10218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(m5));
10228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", map.get(m5));
10238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(m5, "E");
10248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
10258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(m5));
10268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(m4, "A");
10278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
10288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(m4));
10298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * lowerEntry returns preceding entry.
10338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingLowerEntry() {
10358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
10368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.lowerEntry(m3);
10378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, e1.getKey());
10388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.lowerEntry(m6);
10408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e2.getKey());
10418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.lowerEntry(m1);
10438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
10448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.lowerEntry(zero);
10468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
10478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * higherEntry returns next entry.
10518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingHigherEntry() {
10538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
10548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.higherEntry(m3);
10558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, e1.getKey());
10568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.higherEntry(zero);
10588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e2.getKey());
10598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.higherEntry(m5);
10618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e3);
10628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.higherEntry(m6);
10648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
10658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * floorEntry returns preceding entry.
10698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingFloorEntry() {
10718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
10728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.floorEntry(m3);
10738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, e1.getKey());
10748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.floorEntry(m6);
10768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e2.getKey());
10778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.floorEntry(m1);
10798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e3.getKey());
10808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.floorEntry(zero);
10828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
10838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
10848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
10868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * ceilingEntry returns next entry.
10878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
10888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingCeilingEntry() {
10898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
10908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e1 = map.ceilingEntry(m3);
10918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, e1.getKey());
10928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = map.ceilingEntry(zero);
10948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e2.getKey());
10958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e3 = map.ceilingEntry(m5);
10978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e3.getKey());
10988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
10998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e4 = map.ceilingEntry(m6);
11008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e4);
11018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
11028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
11048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * pollFirstEntry returns entries in order
11058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
11068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPollFirstEntry() {
11078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
11088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = map.pollFirstEntry();
11098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e.getKey());
11108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", e.getValue());
11118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
11128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, e.getKey());
11138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(m1, "A");
11148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
11158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e.getKey());
11168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", e.getValue());
11178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
11188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, e.getKey());
11198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(m4);
11208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
11218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e.getKey());
11228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
11238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            e.setValue("A");
11248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
11258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (UnsupportedOperationException success) {}
11268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollFirstEntry();
11278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e);
11288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
11298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
11318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * pollLastEntry returns entries in order
11328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
11338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPollLastEntry() {
11348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
11358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = map.pollLastEntry();
11368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e.getKey());
11378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", e.getValue());
11388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
11398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, e.getKey());
11408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(m5, "E");
11418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
11428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e.getKey());
11438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", e.getValue());
11448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
11458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, e.getKey());
11468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(m2);
11478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
11488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, e.getKey());
11498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
11508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            e.setValue("E");
11518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
11528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (UnsupportedOperationException success) {}
11538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = map.pollLastEntry();
11548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(e);
11558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
11568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
11588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size returns the correct values
11598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
11608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSize() {
11618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
11628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap empty = dmap0();
11638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, empty.size());
11648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, map.size());
11658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
11668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
11688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString contains toString of elements
11698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
11708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingToString() {
11718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
11728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = map.toString();
11738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i <= 5; ++i) {
11748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
11758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
11768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
11778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    // Exception testDescendings
11798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
11818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get(null) of empty map throws NPE
11828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
11838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingGet_NullPointerException() {
11848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
11858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
11868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.get(null);
11878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
11888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
11898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
11908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
11918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
11928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsKey(null) of empty map throws NPE
11938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
11948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingContainsKey_NullPointerException() {
11958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
11968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
11978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.containsKey(null);
11988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
11998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsValue(null) throws NPE
12048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingContainsValue_NullPointerException() {
12068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
12078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap0();
12088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.containsValue(null);
12098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
12108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * put(null,x) throws NPE
12158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPut1_NullPointerException() {
12178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
12188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
12198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.put(null, "whatever");
12208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
12218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent(null, x) throws NPE
12268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingPutIfAbsent1_NullPointerException() {
12288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
12298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
12308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.putIfAbsent(null, "whatever");
12318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
12328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(null, x) throws NPE
12378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingReplace_NullPointerException() {
12398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
12408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
12418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace(null, "whatever");
12428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
12438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(null, x, y) throws NPE
12488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingReplaceValue_NullPointerException() {
12508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
12518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
12528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace(null, m1, "whatever");
12538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
12548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(null) throws NPE
12598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingRemove1_NullPointerException() {
12618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
12628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
12638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.remove(null);
12648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
12658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(null, x) throws NPE
12708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingRemove2_NullPointerException() {
12728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
12738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentNavigableMap c = dmap5();
12748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.remove(null, "whatever");
12758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
12768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
12778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized map equals original
12818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSerialization() throws Exception {
12838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableMap x = dmap5();
12848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        NavigableMap y = serialClone(x);
12858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(x, y);
12878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
12888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.toString(), y.toString());
12898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x, y);
12908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(y, x);
12918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
12928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
12938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
12948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * subMap returns map with keys in requested range
12958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
12968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSubMapContents() {
12978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
12988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.subMap(m2, m4);
12998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, sm.firstKey());
13008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, sm.lastKey());
13018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, sm.size());
13028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m1));
13038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m2));
13048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m3));
13058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m4));
13068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m5));
13078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
13088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
13098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
13118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, k);
13138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
13148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.keySet().iterator();
13158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
13168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
13178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(m2));
13188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
13198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
13208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, sm.firstKey());
13218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, sm.lastKey());
13228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("C", sm.remove(m3));
13238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
13248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, map.size());
13258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
13268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
13278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingSubMapContents2() {
13288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
13298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.subMap(m2, m3);
13308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, sm.size());
13318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, sm.firstKey());
13328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, sm.lastKey());
13338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m1));
13348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m2));
13358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m3));
13368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m4));
13378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m5));
13388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
13398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
13408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
13428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
13438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator j = sm.keySet().iterator();
13448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.next();
13458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        j.remove();
13468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(m2));
13478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
13488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, sm.size());
13498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
13508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(sm.remove(m3), null);
13518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
13528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
13538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
13548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
13558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * headMap returns map with keys in requested range
13568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
13578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingHeadMapContents() {
13588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
13598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.headMap(m4);
13608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m1));
13618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m2));
13628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m3));
13638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m4));
13648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m5));
13658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
13668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
13678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m1, k);
13698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
13718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, k);
13738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
13748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        sm.clear();
13758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.isEmpty());
13768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(2, map.size());
13778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, map.firstKey());
13788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
13798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
13808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
13818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * headMap returns map with keys in requested range
13828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
13838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingTailMapContents() {
13848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentNavigableMap map = dmap5();
13858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap sm = map.tailMap(m2);
13868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(sm.containsKey(m1));
13878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m2));
13888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m3));
13898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m4));
13908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(sm.containsKey(m5));
13918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator i = sm.keySet().iterator();
13928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object k;
13938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, k);
13958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, k);
13978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
13988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, k);
13998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        k = (Integer)(i.next());
14008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, k);
14018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
14028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
14038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator ei = sm.entrySet().iterator();
14048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e;
14058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
14068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m2, e.getKey());
14078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("B", e.getValue());
14088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
14098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m3, e.getKey());
14108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("C", e.getValue());
14118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
14128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, e.getKey());
14138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("D", e.getValue());
14148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = (Map.Entry)(ei.next());
14158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, e.getKey());
14168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("E", e.getValue());
14178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(i.hasNext());
14188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
14198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        SortedMap ssm = sm.tailMap(m4);
14208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m4, ssm.firstKey());
14218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(m5, ssm.lastKey());
14228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("D", ssm.remove(m4));
14238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(1, ssm.size());
14248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, sm.size());
14258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
14268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
14278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
14288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
1429