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