1e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak/* 2e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Written by Doug Lea with assistance from members of JCP JSR-166 3e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Expert Group and released to the public domain, as explained at 4e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * http://creativecommons.org/publicdomain/zero/1.0/ 5e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 6e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 7e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakpackage jsr166; 8e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 9e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport static java.util.Spliterator.CONCURRENT; 10e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport static java.util.Spliterator.DISTINCT; 11e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport static java.util.Spliterator.NONNULL; 12e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 13e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.AbstractMap; 14e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.Arrays; 15e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.Collection; 16e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.Collections; 17e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.Iterator; 18e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.Map; 19e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.NoSuchElementException; 20e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.Set; 21e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.Spliterator; 22e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.concurrent.ConcurrentHashMap; 23e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.concurrent.atomic.LongAdder; 24e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport java.util.function.BiFunction; 25e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 26e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport junit.framework.Test; 27e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakimport junit.framework.TestSuite; 28e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 29e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniakpublic class ConcurrentHashMap8Test extends JSR166TestCase { 30e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // android-note: Removed because the CTS runner does a bad job of 31e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // retrying tests that have suite() declarations. 32e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // 33e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // public static void main(String[] args) { 34e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // main(suite(), args); 35e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // } 36e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // public static Test suite() { 37e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // return new TestSuite(ConcurrentHashMap8Test.class); 38e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // } 39e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 40e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 41e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Returns a new map from Integers 1-5 to Strings "A"-"E". 42e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 43e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak private static ConcurrentHashMap map5() { 44e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = new ConcurrentHashMap(5); 45e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(map.isEmpty()); 46e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.put(one, "A"); 47e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.put(two, "B"); 48e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.put(three, "C"); 49e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.put(four, "D"); 50e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.put(five, "E"); 51e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(map.isEmpty()); 52e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(5, map.size()); 53e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak return map; 54e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 55e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 56e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 57e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * getOrDefault returns value if present, else default 58e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 59e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testGetOrDefault() { 60e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 61e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(map.getOrDefault(one, "Z"), "A"); 62e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(map.getOrDefault(six, "Z"), "Z"); 63e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 64e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 65e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 66e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * computeIfAbsent adds when the given key is not present 67e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 68e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testComputeIfAbsent() { 69e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 70e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.computeIfAbsent(six, (x) -> "Z"); 71e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(map.containsKey(six)); 72e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 73e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 74e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 75e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * computeIfAbsent does not replace if the key is already present 76e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 77e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testComputeIfAbsent2() { 78e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 79e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("A", map.computeIfAbsent(one, (x) -> "Z")); 80e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 81e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 82e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 83e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * computeIfAbsent does not add if function returns null 84e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 85e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testComputeIfAbsent3() { 86e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 87e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.computeIfAbsent(six, (x) -> null); 88e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(map.containsKey(six)); 89e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 90e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 91e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 92e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * computeIfPresent does not replace if the key is already present 93e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 94e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testComputeIfPresent() { 95e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 96e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.computeIfPresent(six, (x, y) -> "Z"); 97e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(map.containsKey(six)); 98e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 99e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 100e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 101e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * computeIfPresent adds when the given key is not present 102e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 103e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testComputeIfPresent2() { 104e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 105e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("Z", map.computeIfPresent(one, (x, y) -> "Z")); 106e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 107e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 108e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 109e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * compute does not replace if the function returns null 110e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 111e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testCompute() { 112e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 113e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.compute(six, (x, y) -> null); 114e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(map.containsKey(six)); 115e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 116e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 117e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 118e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * compute adds when the given key is not present 119e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 120e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testCompute2() { 121e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 122e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("Z", map.compute(six, (x, y) -> "Z")); 123e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 124e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 125e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 126e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * compute replaces when the given key is present 127e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 128e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testCompute3() { 129e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 130e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("Z", map.compute(one, (x, y) -> "Z")); 131e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 132e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 133e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 134e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * compute removes when the given key is present and function returns null 135e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 136e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testCompute4() { 137e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 138e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.compute(one, (x, y) -> null); 139e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(map.containsKey(one)); 140e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 141e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 142e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 143e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * merge adds when the given key is not present 144e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 145e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMerge1() { 146e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 147e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("Y", map.merge(six, "Y", (x, y) -> "Z")); 148e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 149e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 150e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 151e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * merge replaces when the given key is present 152e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 153e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMerge2() { 154e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 155e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("Z", map.merge(one, "Y", (x, y) -> "Z")); 156e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 157e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 158e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 159e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * merge removes when the given key is present and function returns null 160e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 161e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMerge3() { 162e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 163e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.merge(one, "Y", (x, y) -> null); 164e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(map.containsKey(one)); 165e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 166e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 167e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak static Set<Integer> populatedSet(int n) { 168e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set<Integer> a = ConcurrentHashMap.<Integer>newKeySet(); 169e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(a.isEmpty()); 170e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < n; i++) 171e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(a.add(i)); 172e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(n == 0, a.isEmpty()); 173e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(n, a.size()); 174e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak return a; 175e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 176e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 177e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak static Set populatedSet(Integer[] elements) { 178e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set<Integer> a = ConcurrentHashMap.<Integer>newKeySet(); 179e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(a.isEmpty()); 180e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < elements.length; i++) 181e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(a.add(elements[i])); 182e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(a.isEmpty()); 183e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(elements.length, a.size()); 184e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak return a; 185e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 186e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 187e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 188e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * replaceAll replaces all matching values. 189e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 190e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReplaceAll() { 191e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Integer, String> map = map5(); 192e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.replaceAll((x, y) -> { return x > 3 ? "Z" : y; }); 193e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("A", map.get(one)); 194e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("B", map.get(two)); 195e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("C", map.get(three)); 196e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("Z", map.get(four)); 197e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("Z", map.get(five)); 198e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 199e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 200e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 201e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Default-constructed set is empty 202e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 203e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testNewKeySet() { 204e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set a = ConcurrentHashMap.newKeySet(); 205e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(a.isEmpty()); 206e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 207e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 208e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 209e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.add adds the key with the established value to the map; 210e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * remove removes it. 211e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 212e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testKeySetAddRemove() { 213e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 214e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set set1 = map.keySet(); 215e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set set2 = map.keySet(true); 216e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak set2.add(six); 217e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(((ConcurrentHashMap.KeySetView)set2).getMap() == map); 218e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(((ConcurrentHashMap.KeySetView)set1).getMap() == map); 219e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(set2.size(), map.size()); 220e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(set1.size(), map.size()); 221e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue((Boolean)map.get(six)); 222e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(set1.contains(six)); 223e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(set2.contains(six)); 224e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak set2.remove(six); 225e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(map.get(six)); 226e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(set1.contains(six)); 227e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(set2.contains(six)); 228e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 229e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 230e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 231e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.addAll adds each element from the given collection 232e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 233e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testAddAll() { 234e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 235e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.addAll(Arrays.asList(three, four, five))); 236e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(6, full.size()); 237e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.addAll(Arrays.asList(three, four, five))); 238e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(6, full.size()); 239e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 240e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 241e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 242e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.addAll adds each element from the given collection that did not 243e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * already exist in the set 244e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 245e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testAddAll2() { 246e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 247e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // "one" is duplicate and will not be added 248e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.addAll(Arrays.asList(three, four, one))); 249e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(5, full.size()); 250e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.addAll(Arrays.asList(three, four, one))); 251e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(5, full.size()); 252e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 253e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 254e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 255e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.add will not add the element if it already exists in the set 256e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 257e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testAdd2() { 258e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 259e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.add(one)); 260e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(3, full.size()); 261e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 262e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 263e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 264e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.add adds the element when it does not exist in the set 265e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 266e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testAdd3() { 267e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 268e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.add(three)); 269e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.contains(three)); 270e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.add(three)); 271e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.contains(three)); 272e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 273e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 274e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 275e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.add throws UnsupportedOperationException if no default 276e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * mapped value 277e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 278e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testAdd4() { 279e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = map5().keySet(); 280e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak try { 281e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak full.add(three); 282e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak shouldThrow(); 283e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } catch (UnsupportedOperationException success) {} 284e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 285e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 286e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 287e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.add throws NullPointerException if the specified key is 288e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * null 289e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 290e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testAdd5() { 291e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 292e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak try { 293e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak full.add(null); 294e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak shouldThrow(); 295e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } catch (NullPointerException success) {} 296e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 297e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 298e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 299e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySetView.getMappedValue returns the map's mapped value 300e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 301e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testGetMappedValue() { 302e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 3030ee1606ffb8586014fb3ea6e540c07d7180d9e9eNarayan Kamath assertNull(((ConcurrentHashMap.KeySetView) map.keySet()).getMappedValue()); 304e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak try { 305e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak map.keySet(null); 306e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak shouldThrow(); 307e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } catch (NullPointerException success) {} 308e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap.KeySetView set = map.keySet(one); 309e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(set.add(one)); 310e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(set.add(six)); 311e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(set.add(seven)); 312e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(set.getMappedValue() == one); 313e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(map.get(one) != one); 314e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(map.get(six) == one); 315e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(map.get(seven) == one); 316e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 317e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 318e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak void checkSpliteratorCharacteristics(Spliterator<?> sp, 319e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int requiredCharacteristics) { 320e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(requiredCharacteristics, 321e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak requiredCharacteristics & sp.characteristics()); 322e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 323e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 324e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 325e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySetView.spliterator returns spliterator over the elements in this set 326e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 327e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testKeySetSpliterator() { 328e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 329e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap map = map5(); 330e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set set = map.keySet(); 331e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Spliterator<Integer> sp = set.spliterator(); 332e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak checkSpliteratorCharacteristics(sp, CONCURRENT | DISTINCT | NONNULL); 333e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(sp.estimateSize(), map.size()); 334e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Spliterator<Integer> sp2 = sp.trySplit(); 335e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak sp.forEachRemaining((Integer x) -> adder.add(x.longValue())); 336e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long v = adder.sumThenReset(); 337e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak sp2.forEachRemaining((Integer x) -> adder.add(x.longValue())); 338e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long v2 = adder.sum(); 339e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(v + v2, 15); 340e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 341e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 342e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 343e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keyset.clear removes all elements from the set 344e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 345e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testClear() { 346e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 347e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak full.clear(); 348e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(0, full.size()); 349e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 350e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 351e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 352e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keyset.contains returns true for added elements 353e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 354e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testContains() { 355e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 356e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.contains(one)); 357e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.contains(five)); 358e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 359e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 360e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 361e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySets with equal elements are equal 362e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 363e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testEquals() { 364e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set a = populatedSet(3); 365e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set b = populatedSet(3); 366e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(a.equals(b)); 367e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(b.equals(a)); 368e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(a.hashCode(), b.hashCode()); 369e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak a.add(m1); 370e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(a.equals(b)); 371e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(b.equals(a)); 372e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak b.add(m1); 373e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(a.equals(b)); 374e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(b.equals(a)); 375e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(a.hashCode(), b.hashCode()); 376e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 377e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 378e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 379e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.containsAll returns true for collections with subset of elements 380e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 381e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testContainsAll() { 382e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collection full = populatedSet(3); 383e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.containsAll(Arrays.asList())); 384e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.containsAll(Arrays.asList(one))); 385e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.containsAll(Arrays.asList(one, two))); 386e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.containsAll(Arrays.asList(one, two, six))); 387e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.containsAll(Arrays.asList(six))); 388e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 389e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 390e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 391e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.isEmpty is true when empty, else false 392e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 393e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testIsEmpty() { 394e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(populatedSet(0).isEmpty()); 395e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(populatedSet(3).isEmpty()); 396e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 397e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 398e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 399e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.iterator() returns an iterator containing the elements of the 400e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * set 401e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 402e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testIterator() { 403e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collection empty = ConcurrentHashMap.newKeySet(); 404e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int size = 20; 405e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(empty.iterator().hasNext()); 406e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak try { 407e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak empty.iterator().next(); 408e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak shouldThrow(); 409e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } catch (NoSuchElementException success) {} 410e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 411e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] elements = new Integer[size]; 412e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < size; i++) 413e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak elements[i] = i; 414e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collections.shuffle(Arrays.asList(elements)); 415e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collection<Integer> full = populatedSet(elements); 416e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 417e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Iterator it = full.iterator(); 418e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int j = 0; j < size; j++) { 419e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(it.hasNext()); 420e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak it.next(); 421e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 422e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertIteratorExhausted(it); 423e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 424e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 425e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 426e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * iterator of empty collections has no elements 427e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 428e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testEmptyIterator() { 429e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertIteratorExhausted(ConcurrentHashMap.newKeySet().iterator()); 430e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertIteratorExhausted(new ConcurrentHashMap().entrySet().iterator()); 431e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertIteratorExhausted(new ConcurrentHashMap().values().iterator()); 432e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertIteratorExhausted(new ConcurrentHashMap().keySet().iterator()); 433e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 434e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 435e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 436e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.iterator.remove removes current element 437e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 438e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testIteratorRemove() { 439e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set q = populatedSet(3); 440e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Iterator it = q.iterator(); 441e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Object removed = it.next(); 442e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak it.remove(); 443e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 444e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak it = q.iterator(); 445e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(it.next().equals(removed)); 446e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(it.next().equals(removed)); 447e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(it.hasNext()); 448e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 449e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 450e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 451e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.toString holds toString of elements 452e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 453e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testToString() { 454e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals("[]", ConcurrentHashMap.newKeySet().toString()); 455e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 456e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak String s = full.toString(); 457e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < 3; ++i) 458e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(s.contains(String.valueOf(i))); 459e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 460e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 461e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 462e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.removeAll removes all elements from the given collection 463e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 464e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testRemoveAll() { 465e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 466e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.removeAll(Arrays.asList(one, two))); 467e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(1, full.size()); 468e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.removeAll(Arrays.asList(one, two))); 469e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(1, full.size()); 470e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 471e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 472e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 473e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.remove removes an element 474e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 475e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testRemove() { 476e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 477e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak full.remove(one); 478e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(full.contains(one)); 479e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(2, full.size()); 480e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 481e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 482e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 483e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * keySet.size returns the number of elements 484e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 485e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSize() { 486e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set empty = ConcurrentHashMap.newKeySet(); 487e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set full = populatedSet(3); 488e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(3, full.size()); 489e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(0, empty.size()); 490e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 491e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 492e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 493e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * KeySet.toArray() returns an Object array containing all elements from 494e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * the set 495e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 496e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testToArray() { 497e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Object[] a = ConcurrentHashMap.newKeySet().toArray(); 498e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(Arrays.equals(new Object[0], a)); 499e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(Object[].class, a.getClass()); 500e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int size = 20; 501e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] elements = new Integer[size]; 502e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < size; i++) 503e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak elements[i] = i; 504e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collections.shuffle(Arrays.asList(elements)); 505e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collection<Integer> full = populatedSet(elements); 506e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 507e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(Arrays.asList(elements).containsAll(Arrays.asList(full.toArray()))); 508e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(full.containsAll(Arrays.asList(full.toArray()))); 509e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(Object[].class, full.toArray().getClass()); 510e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 511e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 512e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 513e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * toArray(Integer array) returns an Integer array containing all 514e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * elements from the set 515e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 516e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testToArray2() { 517e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collection empty = ConcurrentHashMap.newKeySet(); 518e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] a; 519e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int size = 20; 520e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 521e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak a = new Integer[0]; 522e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(a, empty.toArray(a)); 523e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 524e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak a = new Integer[size / 2]; 525e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Arrays.fill(a, 42); 526e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(a, empty.toArray(a)); 527e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(a[0]); 528e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 1; i < a.length; i++) 529e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(42, (int) a[i]); 530e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 531e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] elements = new Integer[size]; 532e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < size; i++) 533e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak elements[i] = i; 534e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collections.shuffle(Arrays.asList(elements)); 535e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Collection<Integer> full = populatedSet(elements); 536e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 537e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Arrays.fill(a, 42); 538e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(Arrays.asList(elements).containsAll(Arrays.asList(full.toArray(a)))); 539e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < a.length; i++) 540e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(42, (int) a[i]); 541e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(Integer[].class, full.toArray(a).getClass()); 542e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 543e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak a = new Integer[size]; 544e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Arrays.fill(a, 42); 545e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(a, full.toArray(a)); 546e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(Arrays.asList(elements).containsAll(Arrays.asList(full.toArray(a)))); 547e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 548e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 549e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 550e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * A deserialized serialized set is equal 551e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 552e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSerialization() throws Exception { 553e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int size = 20; 554e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set x = populatedSet(size); 555e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Set y = serialClone(x); 556e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 557e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNotSame(x, y); 558e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(x.size(), y.size()); 559e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(x, y); 560e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(y, x); 561e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 562e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 563e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak static final int SIZE = 10000; 564e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak static ConcurrentHashMap<Long, Long> longMap; 565e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 566e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak static ConcurrentHashMap<Long, Long> longMap() { 567e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak if (longMap == null) { 568e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak longMap = new ConcurrentHashMap<Long, Long>(SIZE); 569e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < SIZE; ++i) 570e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak longMap.put(Long.valueOf(i), Long.valueOf(2 *i)); 571e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 572e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak return longMap; 573e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 574e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 575e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // explicit function class to avoid type inference problems 576e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak static class AddKeys implements BiFunction<Map.Entry<Long,Long>, Map.Entry<Long,Long>, Map.Entry<Long,Long>> { 577e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public Map.Entry<Long,Long> apply(Map.Entry<Long,Long> x, Map.Entry<Long,Long> y) { 578e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak return new AbstractMap.SimpleEntry<Long,Long> 579e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long.valueOf(x.getKey().longValue() + y.getKey().longValue()), 580e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long.valueOf(1L)); 581e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 582e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 583e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 584e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 585e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachKeySequentially traverses all keys 586e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 587e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachKeySequentially() { 588e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 589e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 590e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachKey(Long.MAX_VALUE, (Long x) -> adder.add(x.longValue())); 591e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), SIZE * (SIZE - 1) / 2); 592e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 593e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 594e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 595e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachValueSequentially traverses all values 596e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 597e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachValueSequentially() { 598e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 599e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 600e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachValue(Long.MAX_VALUE, (Long x) -> adder.add(x.longValue())); 601e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), SIZE * (SIZE - 1)); 602e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 603e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 604e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 605e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachSequentially traverses all mappings 606e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 607e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachSequentially() { 608e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 609e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 610e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEach(Long.MAX_VALUE, (Long x, Long y) -> adder.add(x.longValue() + y.longValue())); 611e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 612e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 613e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 614e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 615e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachEntrySequentially traverses all entries 616e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 617e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachEntrySequentially() { 618e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 619e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 620e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachEntry(Long.MAX_VALUE, (Map.Entry<Long,Long> e) -> adder.add(e.getKey().longValue() + e.getValue().longValue())); 621e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 622e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 623e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 624e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 625e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachKeyInParallel traverses all keys 626e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 627e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachKeyInParallel() { 628e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 629e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 630e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachKey(1L, (Long x) -> adder.add(x.longValue())); 631e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), SIZE * (SIZE - 1) / 2); 632e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 633e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 634e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 635e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachValueInParallel traverses all values 636e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 637e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachValueInParallel() { 638e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 639e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 640e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachValue(1L, (Long x) -> adder.add(x.longValue())); 641e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), SIZE * (SIZE - 1)); 642e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 643e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 644e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 645e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachInParallel traverses all mappings 646e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 647e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachInParallel() { 648e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 649e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 650e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEach(1L, (Long x, Long y) -> adder.add(x.longValue() + y.longValue())); 651e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 652e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 653e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 654e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 655e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * forEachEntryInParallel traverses all entries 656e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 657e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testForEachEntryInParallel() { 658e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 659e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 660e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachEntry(1L, (Map.Entry<Long,Long> e) -> adder.add(e.getKey().longValue() + e.getValue().longValue())); 661e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 662e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 663e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 664e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 665e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachKeySequentially traverses the given 666e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all keys 667e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 668e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachKeySequentially() { 669e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 670e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 671e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachKey(Long.MAX_VALUE, (Long x) -> Long.valueOf(4 * x.longValue()), 672e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 673e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 4 * SIZE * (SIZE - 1) / 2); 674e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 675e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 676e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 677e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachValueSequentially traverses the given 678e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all values 679e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 680e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachValueSequentially() { 681e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 682e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 683e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachValue(Long.MAX_VALUE, (Long x) -> Long.valueOf(4 * x.longValue()), 684e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 685e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 4 * SIZE * (SIZE - 1)); 686e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 687e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 688e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 689e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachSequentially traverses the given 690e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all mappings 691e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 692e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachSequentially() { 693e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 694e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 695e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEach(Long.MAX_VALUE, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue()), 696e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 697e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 698e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 699e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 700e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 701e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachEntrySequentially traverses the given 702e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all entries 703e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 704e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachEntrySequentially() { 705e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 706e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 707e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachEntry(Long.MAX_VALUE, (Map.Entry<Long,Long> e) -> Long.valueOf(e.getKey().longValue() + e.getValue().longValue()), 708e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 709e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 710e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 711e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 712e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 713e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachKeyInParallel traverses the given 714e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all keys 715e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 716e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachKeyInParallel() { 717e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 718e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 719e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachKey(1L, (Long x) -> Long.valueOf(4 * x.longValue()), 720e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 721e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 4 * SIZE * (SIZE - 1) / 2); 722e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 723e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 724e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 725e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachValueInParallel traverses the given 726e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all values 727e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 728e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachValueInParallel() { 729e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 730e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 731e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachValue(1L, (Long x) -> Long.valueOf(4 * x.longValue()), 732e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 733e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 4 * SIZE * (SIZE - 1)); 734e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 735e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 736e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 737e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachInParallel traverses the given 738e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all mappings 739e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 740e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachInParallel() { 741e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 742e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 743e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEach(1L, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue()), 744e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 745e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 746e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 747e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 748e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 749e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped forEachEntryInParallel traverses the given 750e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * transformations of all entries 751e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 752e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedForEachEntryInParallel() { 753e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak LongAdder adder = new LongAdder(); 754e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 755e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak m.forEachEntry(1L, (Map.Entry<Long,Long> e) -> Long.valueOf(e.getKey().longValue() + e.getValue().longValue()), 756e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> adder.add(x.longValue())); 757e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(adder.sum(), 3 * SIZE * (SIZE - 1) / 2); 758e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 759e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 760e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 761e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysSequentially accumulates across all keys, 762e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 763e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysSequentially() { 764e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 765e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 766e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.reduceKeys(Long.MAX_VALUE, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 767e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)SIZE * (SIZE - 1) / 2); 768e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 769e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 770e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 771e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesSequentially accumulates across all values 772e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 773e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesSequentially() { 774e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 775e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 776e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.reduceKeys(Long.MAX_VALUE, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 777e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)SIZE * (SIZE - 1) / 2); 778e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 779e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 780e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 781e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceEntriesSequentially accumulates across all entries 782e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 783e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceEntriesSequentially() { 784e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 785e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Map.Entry<Long,Long> r; 786e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.reduceEntries(Long.MAX_VALUE, new AddKeys()); 787e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(r.getKey().longValue(), (long)SIZE * (SIZE - 1) / 2); 788e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 789e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 790e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 791e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysInParallel accumulates across all keys 792e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 793e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysInParallel() { 794e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 795e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 796e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.reduceKeys(1L, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 797e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)SIZE * (SIZE - 1) / 2); 798e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 799e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 800e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 801e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesInParallel accumulates across all values 802e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 803e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesInParallel() { 804e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 805e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 806e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.reduceValues(1L, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 807e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)SIZE * (SIZE - 1)); 808e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 809e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 810e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 811e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceEntriesInParallel accumulate across all entries 812e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 813e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceEntriesInParallel() { 814e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 815e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Map.Entry<Long,Long> r; 816e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.reduceEntries(1L, new AddKeys()); 817e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(r.getKey().longValue(), (long)SIZE * (SIZE - 1) / 2); 818e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 819e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 820e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 821e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped reduceKeysSequentially accumulates mapped keys 822e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 823e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMapReduceKeysSequentially() { 824e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 825e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r = m.reduceKeys(Long.MAX_VALUE, (Long x) -> Long.valueOf(4 * x.longValue()), 826e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 827e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)4 * SIZE * (SIZE - 1) / 2); 828e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 829e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 830e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 831e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped reduceValuesSequentially accumulates mapped values 832e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 833e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMapReduceValuesSequentially() { 834e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 835e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r = m.reduceValues(Long.MAX_VALUE, (Long x) -> Long.valueOf(4 * x.longValue()), 836e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 837e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)4 * SIZE * (SIZE - 1)); 838e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 839e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 840e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 841e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceSequentially accumulates across all transformed mappings 842e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 843e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedReduceSequentially() { 844e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 845e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r = m.reduce(Long.MAX_VALUE, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue()), 846e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 847e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 848e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)3 * SIZE * (SIZE - 1) / 2); 849e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 850e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 851e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 852e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped reduceKeysInParallel, accumulates mapped keys 853e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 854e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMapReduceKeysInParallel() { 855e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 856e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r = m.reduceKeys(1L, (Long x) -> Long.valueOf(4 * x.longValue()), 857e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 858e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)4 * SIZE * (SIZE - 1) / 2); 859e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 860e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 861e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 862e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * Mapped reduceValuesInParallel accumulates mapped values 863e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 864e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMapReduceValuesInParallel() { 865e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 866e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r = m.reduceValues(1L, (Long x) -> Long.valueOf(4 * x.longValue()), 867e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 868e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)4 * SIZE * (SIZE - 1)); 869e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 870e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 871e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 872e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceInParallel accumulate across all transformed mappings 873e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 874e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testMappedReduceInParallel() { 875e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 876e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 877e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.reduce(1L, (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue()), 878e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x, Long y) -> Long.valueOf(x.longValue() + y.longValue())); 879e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)3 * SIZE * (SIZE - 1) / 2); 880e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 881e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 882e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 883e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysToLongSequentially accumulates mapped keys 884e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 885e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysToLongSequentially() { 886e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 887e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long lr = m.reduceKeysToLong(Long.MAX_VALUE, (Long x) -> x.longValue(), 0L, Long::sum); 888e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(lr, (long)SIZE * (SIZE - 1) / 2); 889e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 890e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 891e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 892e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysToIntSequentially accumulates mapped keys 893e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 894e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysToIntSequentially() { 895e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 896e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int ir = m.reduceKeysToInt(Long.MAX_VALUE, (Long x) -> x.intValue(), 0, Integer::sum); 897e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(ir, SIZE * (SIZE - 1) / 2); 898e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 899e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 900e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 901e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysToDoubleSequentially accumulates mapped keys 902e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 903e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysToDoubleSequentially() { 904e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 905e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak double dr = m.reduceKeysToDouble(Long.MAX_VALUE, (Long x) -> x.doubleValue(), 0.0, Double::sum); 906e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(dr, (double)SIZE * (SIZE - 1) / 2); 907e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 908e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 909e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 910e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesToLongSequentially accumulates mapped values 911e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 912e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesToLongSequentially() { 913e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 914e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long lr = m.reduceValuesToLong(Long.MAX_VALUE, (Long x) -> x.longValue(), 0L, Long::sum); 915e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(lr, (long)SIZE * (SIZE - 1)); 916e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 917e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 918e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 919e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesToIntSequentially accumulates mapped values 920e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 921e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesToIntSequentially() { 922e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 923e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int ir = m.reduceValuesToInt(Long.MAX_VALUE, (Long x) -> x.intValue(), 0, Integer::sum); 924e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(ir, SIZE * (SIZE - 1)); 925e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 926e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 927e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 928e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesToDoubleSequentially accumulates mapped values 929e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 930e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesToDoubleSequentially() { 931e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 932e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak double dr = m.reduceValuesToDouble(Long.MAX_VALUE, (Long x) -> x.doubleValue(), 0.0, Double::sum); 933e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(dr, (double)SIZE * (SIZE - 1)); 934e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 935e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 936e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 937e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysToLongInParallel accumulates mapped keys 938e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 939e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysToLongInParallel() { 940e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 941e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long lr = m.reduceKeysToLong(1L, (Long x) -> x.longValue(), 0L, Long::sum); 942e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(lr, (long)SIZE * (SIZE - 1) / 2); 943e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 944e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 945e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 946e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysToIntInParallel accumulates mapped keys 947e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 948e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysToIntInParallel() { 949e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 950e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int ir = m.reduceKeysToInt(1L, (Long x) -> x.intValue(), 0, Integer::sum); 951e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(ir, SIZE * (SIZE - 1) / 2); 952e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 953e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 954e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 955e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceKeysToDoubleInParallel accumulates mapped values 956e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 957e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceKeysToDoubleInParallel() { 958e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 959e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak double dr = m.reduceKeysToDouble(1L, (Long x) -> x.doubleValue(), 0.0, Double::sum); 960e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(dr, (double)SIZE * (SIZE - 1) / 2); 961e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 962e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 963e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 964e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesToLongInParallel accumulates mapped values 965e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 966e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesToLongInParallel() { 967e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 968e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long lr = m.reduceValuesToLong(1L, (Long x) -> x.longValue(), 0L, Long::sum); 969e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(lr, (long)SIZE * (SIZE - 1)); 970e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 971e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 972e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 973e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesToIntInParallel accumulates mapped values 974e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 975e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesToIntInParallel() { 976e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 977e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak int ir = m.reduceValuesToInt(1L, (Long x) -> x.intValue(), 0, Integer::sum); 978e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(ir, SIZE * (SIZE - 1)); 979e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 980e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 981e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 982e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * reduceValuesToDoubleInParallel accumulates mapped values 983e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 984e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testReduceValuesToDoubleInParallel() { 985e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 986e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak double dr = m.reduceValuesToDouble(1L, (Long x) -> x.doubleValue(), 0.0, Double::sum); 987e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(dr, (double)SIZE * (SIZE - 1)); 988e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 989e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 990e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 991e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchKeysSequentially returns a non-null result of search 992e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * function, or null if none 993e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 994e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchKeysSequentially() { 995e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 996e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 997e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchKeys(Long.MAX_VALUE, (Long x) -> x.longValue() == (long)(SIZE/2) ? x : null); 998e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 999e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchKeys(Long.MAX_VALUE, (Long x) -> x.longValue() < 0L ? x : null); 1000e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1001e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1002e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1003e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 1004e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchValuesSequentially returns a non-null result of search 1005e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * function, or null if none 1006e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 1007e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchValuesSequentially() { 1008e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 1009e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 1010e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchValues(Long.MAX_VALUE, 1011e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> (x.longValue() == (long)(SIZE/2)) ? x : null); 1012e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 1013e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchValues(Long.MAX_VALUE, 1014e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak (Long x) -> (x.longValue() < 0L) ? x : null); 1015e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1016e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1017e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1018e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 1019e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchSequentially returns a non-null result of search 1020e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * function, or null if none 1021e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 1022e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchSequentially() { 1023e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 1024e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 1025e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.search(Long.MAX_VALUE, (Long x, Long y) -> x.longValue() == (long)(SIZE/2) ? x : null); 1026e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 1027e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.search(Long.MAX_VALUE, (Long x, Long y) -> x.longValue() < 0L ? x : null); 1028e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1029e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1030e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1031e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 1032e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchEntriesSequentially returns a non-null result of search 1033e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * function, or null if none 1034e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 1035e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchEntriesSequentially() { 1036e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 1037e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 1038e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchEntries(Long.MAX_VALUE, (Map.Entry<Long,Long> e) -> e.getKey().longValue() == (long)(SIZE/2) ? e.getKey() : null); 1039e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 1040e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchEntries(Long.MAX_VALUE, (Map.Entry<Long,Long> e) -> e.getKey().longValue() < 0L ? e.getKey() : null); 1041e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1042e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1043e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1044e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 1045e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchKeysInParallel returns a non-null result of search 1046e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * function, or null if none 1047e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 1048e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchKeysInParallel() { 1049e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 1050e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 1051e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchKeys(1L, (Long x) -> x.longValue() == (long)(SIZE/2) ? x : null); 1052e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 1053e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchKeys(1L, (Long x) -> x.longValue() < 0L ? x : null); 1054e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1055e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1056e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1057e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 1058e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchValuesInParallel returns a non-null result of search 1059e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * function, or null if none 1060e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 1061e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchValuesInParallel() { 1062e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 1063e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 1064e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchValues(1L, (Long x) -> x.longValue() == (long)(SIZE/2) ? x : null); 1065e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 1066e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchValues(1L, (Long x) -> x.longValue() < 0L ? x : null); 1067e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1068e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1069e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1070e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 1071e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchInParallel returns a non-null result of search function, 1072e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * or null if none 1073e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 1074e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchInParallel() { 1075e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 1076e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 1077e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.search(1L, (Long x, Long y) -> x.longValue() == (long)(SIZE/2) ? x : null); 1078e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 1079e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.search(1L, (Long x, Long y) -> x.longValue() < 0L ? x : null); 1080e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1081e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1082e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1083e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak /** 1084e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * searchEntriesInParallel returns a non-null result of search 1085e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak * function, or null if none 1086e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak */ 1087e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void testSearchEntriesInParallel() { 1088e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ConcurrentHashMap<Long, Long> m = longMap(); 1089e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Long r; 1090e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchEntries(1L, (Map.Entry<Long,Long> e) -> e.getKey().longValue() == (long)(SIZE/2) ? e.getKey() : null); 1091e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals((long)r, (long)(SIZE/2)); 1092e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak r = m.searchEntries(1L, (Map.Entry<Long,Long> e) -> e.getKey().longValue() < 0L ? e.getKey() : null); 1093e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(r); 1094e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 1095e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 1096e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak} 1097