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 * Other contributors include Andrew Wright, Jeffrey Hayes,
68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd.
78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */
88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166;
108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport junit.framework.*;
128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.*;
138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ConcurrentHashMap;
148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ConcurrentHashMapTest extends JSR166TestCase {
168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new map from Integers 1-5 to Strings "A"-"E".
198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private static ConcurrentHashMap map5() {
218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = new ConcurrentHashMap(5);
228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.isEmpty());
238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(one, "A");
248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(two, "B");
258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(three, "C");
268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(four, "D");
278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.put(five, "E");
288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.isEmpty());
298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, map.size());
308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return map;
318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    // classes for testing Comparable fallbacks
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static class BI implements Comparable<BI> {
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        private final int value;
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        BI(int value) { this.value = value; }
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public int compareTo(BI other) {
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            return Integer.compare(value, other.value);
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public boolean equals(Object x) {
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            return (x instanceof BI) && ((BI)x).value == value;
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public int hashCode() { return 42; }
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static class CI extends BI { CI(int value) { super(value); } }
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static class DI extends BI { DI(int value) { super(value); } }
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static class BS implements Comparable<BS> {
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        private final String value;
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        BS(String value) { this.value = value; }
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public int compareTo(BS other) {
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            return value.compareTo(other.value);
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public boolean equals(Object x) {
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            return (x instanceof BS) && value.equals(((BS)x).value);
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public int hashCode() { return 42; }
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static class LexicographicList<E extends Comparable<E>> extends ArrayList<E>
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        implements Comparable<LexicographicList<E>> {
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        static long total;
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        static long n;
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        LexicographicList(Collection<E> c) { super(c); }
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        LexicographicList(E e) { super(Collections.singleton(e)); }
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public int compareTo(LexicographicList<E> other) {
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            long start = System.currentTimeMillis();
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            int common = Math.min(size(), other.size());
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            int r = 0;
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int i = 0; i < common; i++) {
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                if ((r = get(i).compareTo(other.get(i))) != 0)
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                    break;
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            if (r == 0)
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                r = Integer.compare(size(), other.size());
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            total += System.currentTimeMillis() - start;
778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            n++;
788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            return r;
798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        private static final long serialVersionUID = 0;
818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Inserted elements that are subclasses of the same Comparable
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * class are found.
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testComparableFamily() {
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap<BI, Boolean> m =
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            new ConcurrentHashMap<BI, Boolean>();
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < 1000; i++) {
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(m.put(new CI(i), true) == null);
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < 1000; i++) {
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(m.containsKey(new CI(i)));
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(m.containsKey(new DI(i)));
968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Elements of classes with erased generic type parameters based
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * on Comparable can be inserted and found.
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     public void testGenericComparable() {
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle         ConcurrentHashMap<Object, Boolean> m =
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             new ConcurrentHashMap<Object, Boolean>();
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle         for (int i = 0; i < 1000; i++) {
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             BI bi = new BI(i);
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             BS bs = new BS(String.valueOf(i));
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             LexicographicList<BI> bis = new LexicographicList<BI>(bi);
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             LexicographicList<BS> bss = new LexicographicList<BS>(bs);
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             assertTrue(m.putIfAbsent(bis, true) == null);
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             assertTrue(m.containsKey(bis));
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             if (m.putIfAbsent(bss, true) == null)
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                 assertTrue(m.containsKey(bss));
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             assertTrue(m.containsKey(bis));
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle         }
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle         for (int i = 0; i < 1000; i++) {
1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle             assertTrue(m.containsKey(new ArrayList(Collections.singleton(new BI(i)))));
1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle         }
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     }
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Elements of non-comparable classes equal to those of classes
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * with erased generic type parameters based on Comparable can be
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * inserted and found.
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGenericComparable2() {
1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap<Object, Boolean> m =
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            new ConcurrentHashMap<Object, Boolean>();
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < 1000; i++) {
1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            m.put(new ArrayList(Collections.singleton(new BI(i))), true);
1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < 1000; i++) {
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            LexicographicList<BI> bis = new LexicographicList<BI>(new BI(i));
1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(m.containsKey(bis));
1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all pairs
1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testClear() {
1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.clear();
1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, map.size());
1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Maps with same contents are equal
1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEquals() {
1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map1 = map5();
1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map2 = map5();
1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(map1, map2);
1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(map2, map1);
1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map1.clear();
1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map1.equals(map2));
1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map2.equals(map1));
1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * contains returns true for contained value
1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContains() {
1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.contains("A"));
1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.contains("Z"));
1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsKey returns true for contained key
1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsKey() {
1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(one));
1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(zero));
1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsValue returns true for held values
1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsValue() {
1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsValue("A"));
1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsValue("Z"));
1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * enumeration returns an enumeration containing the correct
1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * elements
1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEnumeration() {
1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Enumeration e = map.elements();
1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int count = 0;
1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (e.hasMoreElements()) {
1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            count++;
1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            e.nextElement();
2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, count);
2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get returns the correct element at the given key,
2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * or null if not present
2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGet() {
2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", (String)map.get(one));
2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap empty = new ConcurrentHashMap();
2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(map.get("anything"));
2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * isEmpty is true of empty map and false for non-empty
2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIsEmpty() {
2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap empty = new ConcurrentHashMap();
2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.isEmpty());
2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.isEmpty());
2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keys returns an enumeration containing all the keys from the map
2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testKeys() {
2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Enumeration e = map.keys();
2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int count = 0;
2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (e.hasMoreElements()) {
2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            count++;
2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            e.nextElement();
2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, count);
2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet returns a Set containing all the keys
2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testKeySet() {
2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(one));
2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(two));
2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(three));
2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(four));
2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains(five));
2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * keySet.toArray returns contains all keys
2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testKeySetToArray() {
2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.keySet();
2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = s.toArray();
2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.containsAll(Arrays.asList(ar)));
2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ar[0] = m10;
2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s.containsAll(Arrays.asList(ar)));
2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Values.toArray contains all values
2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testValuesToArray() {
2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Collection v = map.values();
2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = v.toArray();
2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayList s = new ArrayList(Arrays.asList(ar));
2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("A"));
2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("B"));
2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("C"));
2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("D"));
2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("E"));
2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * entrySet.toArray contains all entries
2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEntrySetToArray() {
2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.entrySet();
2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] ar = s.toArray();
2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, ar.length);
2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < 5; ++i) {
2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(map.containsKey(((Map.Entry)(ar[i])).getKey()));
2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(map.containsValue(((Map.Entry)(ar[i])).getValue()));
2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * values collection contains all values
2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testValues() {
3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Collection s = map.values();
3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("A"));
3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("B"));
3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("C"));
3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("D"));
3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(s.contains("E"));
3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * entrySet contains all pairs
3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEntrySet() {
3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Set s = map.entrySet();
3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, s.size());
3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = s.iterator();
3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Map.Entry e = (Map.Entry) it.next();
3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(
3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(one) && e.getValue().equals("A")) ||
3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(two) && e.getValue().equals("B")) ||
3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(three) && e.getValue().equals("C")) ||
3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(four) && e.getValue().equals("D")) ||
3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       (e.getKey().equals(five) && e.getValue().equals("E")));
3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putAll adds all key-value pairs from the given map
3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutAll() {
3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap empty = new ConcurrentHashMap();
3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        empty.putAll(map);
3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, empty.size());
3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(one));
3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(two));
3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(three));
3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(four));
3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(empty.containsKey(five));
3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent works when the given key is not present
3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutIfAbsent() {
3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.putIfAbsent(six, "Z");
3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(six));
3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent does not add the pair if the key is already present
3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutIfAbsent2() {
3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.putIfAbsent(one, "Z"));
3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace fails when the given key is not present
3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplace() {
3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(map.replace(six, "Z"));
3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(six));
3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace succeeds if the key is already present
3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplace2() {
3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotNull(map.replace(one, "Z"));
3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("Z", map.get(one));
3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace value fails when the given key not mapped to expected value
3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue() {
3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(one));
3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.replace(one, "Z", "Z"));
3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(one));
3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace value succeeds when the given key mapped to expected value
3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue2() {
3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("A", map.get(one));
3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.replace(one, "A", "Z"));
3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("Z", map.get(one));
3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove removes the correct key-value pair from the map
4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove() {
4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(five);
4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(five));
4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(key,value) removes only if pair present
4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove2() {
4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(five, "E");
4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.containsKey(five));
4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        map.remove(four, "A");
4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(4, map.size());
4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.containsKey(four));
4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size returns the correct values
4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSize() {
4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap empty = new ConcurrentHashMap();
4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, empty.size());
4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(5, map.size());
4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString contains toString of elements
4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToString() {
4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = map5();
4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = map.toString();
4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i <= 5; ++i) {
4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    // Exception tests
4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Cannot create with negative capacity
4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor1() {
4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            new ConcurrentHashMap(-1,0,1);
4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (IllegalArgumentException success) {}
4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Cannot create with negative concurrency level
4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor2() {
4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            new ConcurrentHashMap(1,0,-1);
4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (IllegalArgumentException success) {}
4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Cannot create with only negative capacity
4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor3() {
4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            new ConcurrentHashMap(-1);
4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (IllegalArgumentException success) {}
4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get(null) throws NPE
4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGet_NullPointerException() {
4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.get(null);
4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsKey(null) throws NPE
4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsKey_NullPointerException() {
4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.containsKey(null);
4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsValue(null) throws NPE
4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsValue_NullPointerException() {
5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.containsValue(null);
5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * contains(null) throws NPE
5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContains_NullPointerException() {
5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.contains(null);
5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * put(null,x) throws NPE
5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPut1_NullPointerException() {
5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.put(null, "whatever");
5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * put(x, null) throws NPE
5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPut2_NullPointerException() {
5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.put("whatever", null);
5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent(null, x) throws NPE
5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutIfAbsent1_NullPointerException() {
5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.putIfAbsent(null, "whatever");
5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(null, x) throws NPE
5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplace_NullPointerException() {
5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace(null, "whatever");
5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(null, x, y) throws NPE
5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue_NullPointerException() {
5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace(null, one, "whatever");
5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * putIfAbsent(x, null) throws NPE
5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPutIfAbsent2_NullPointerException() {
5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.putIfAbsent("whatever", null);
5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(x, null) throws NPE
5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplace2_NullPointerException() {
5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace("whatever", null);
5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(x, null, y) throws NPE
5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue2_NullPointerException() {
6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace("whatever", null, "A");
6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * replace(x, y, null) throws NPE
6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testReplaceValue3_NullPointerException() {
6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.replace("whatever", one, null);
6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(null) throws NPE
6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove1_NullPointerException() {
6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.put("sadsdf", "asdads");
6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.remove(null);
6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(null, x) throws NPE
6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove2_NullPointerException() {
6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentHashMap c = new ConcurrentHashMap(5);
6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.put("sadsdf", "asdads");
6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            c.remove(null, "whatever");
6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(x, null) returns false
6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove3() {
6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap c = new ConcurrentHashMap(5);
6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        c.put("sadsdf", "asdads");
6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(c.remove("sadsdf", null));
6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized map equals original
6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSerialization() throws Exception {
6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map x = map5();
6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map y = serialClone(x);
6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(x, y);
6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x, y);
6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(y, x);
6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * SetValue of an EntrySet entry sets value in the map.
6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSetValueWriteThrough() {
6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        // Adapted from a bug report by Eric Zoerner
6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentHashMap map = new ConcurrentHashMap(2, 5.0f, 1);
6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(map.isEmpty());
6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < 20; i++)
6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            map.put(new Integer(i), new Integer(i));
6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(map.isEmpty());
6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry entry1 = (Map.Entry)map.entrySet().iterator().next();
6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        // Unless it happens to be first (in which case remainder of
6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        // test is skipped), remove a possibly-colliding key from map
6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        // which, under some implementations, may cause entry1 to be
6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        // cloned in map
6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        if (!entry1.getKey().equals(new Integer(16))) {
6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            map.remove(new Integer(16));
6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            entry1.setValue("XYZ");
6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(map.containsValue("XYZ")); // fails if write-through broken
6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
687