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