ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentHashMap8Test.java
Revision: 1.29
Committed: Sun May 24 01:23:17 2015 UTC (8 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.28: +1 -1 lines
Log Message:
coding style

File Contents

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