ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentHashMap8Test.java
Revision: 1.9
Committed: Tue May 21 19:11:16 2013 UTC (10 years, 11 months ago) by dl
Branch: MAIN
Changes since 1.8: +56 -155 lines
Log Message:
Track API changes

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