|
32 | 32 | import java.util.function.BiConsumer;
|
33 | 33 | import java.util.function.ObjDoubleConsumer;
|
34 | 34 | import java.util.function.Supplier;
|
35 |
| -import java.util.stream.Collectors; |
36 | 35 | import java.util.stream.DoubleStream;
|
37 | 36 |
|
38 |
| -import static org.testng.Assert.assertTrue; |
39 |
| - |
40 | 37 | import org.testng.Assert;
|
41 | 38 | import org.testng.annotations.Test;
|
42 | 39 |
|
@@ -68,36 +65,38 @@ public void testCompensatedSums() {
|
68 | 65 | // Older less accurate implementations included here as the baseline.
|
69 | 66 |
|
70 | 67 | // squared error of naive sum by reduction - should be large
|
71 |
| - naive += Math.pow(DoubleStream.of(rand).reduce((x, y) -> x+y).getAsDouble() - sum[0], 2); |
| 68 | + naive += square(DoubleStream.of(rand).reduce((x, y) -> x+y).getAsDouble() - sum[0]); |
72 | 69 |
|
73 | 70 | // squared error of sequential sum - should be 0
|
74 |
| - jdkSequentialStreamError += Math.pow(DoubleStream.of(rand).sum() - sum[0], 2); |
| 71 | + jdkSequentialStreamError += square(DoubleStream.of(rand).sum() - sum[0]); |
75 | 72 |
|
76 |
| - goodSequentialStreamError += Math.pow(computeFinalSum(DoubleStream.of(rand).collect(doubleSupplier,objDoubleConsumer,goodCollectorConsumer)) - sum[0], 2); |
| 73 | + goodSequentialStreamError += square(computeFinalSum(DoubleStream.of(rand).collect(doubleSupplier,objDoubleConsumer,goodCollectorConsumer)) - sum[0]); |
77 | 74 |
|
78 | 75 | // squared error of parallel sum from the JDK
|
79 |
| - jdkParallelStreamError += Math.pow(DoubleStream.of(rand).parallel().sum() - sum[0], 2); |
| 76 | + jdkParallelStreamError += square(DoubleStream.of(rand).parallel().sum() - sum[0]); |
80 | 77 |
|
81 | 78 | // squared error of parallel sum
|
82 |
| - goodParallelStreamError += Math.pow(computeFinalSum(DoubleStream.of(rand).parallel().collect(doubleSupplier,objDoubleConsumer,goodCollectorConsumer)) - sum[0], 2); |
| 79 | + goodParallelStreamError += square(computeFinalSum(DoubleStream.of(rand).parallel().collect(doubleSupplier,objDoubleConsumer,goodCollectorConsumer)) - sum[0]); |
83 | 80 |
|
84 | 81 | // the bad parallel stream
|
85 |
| - badParallelStreamError += Math.pow(computeFinalSum(DoubleStream.of(rand).parallel().collect(doubleSupplier,objDoubleConsumer,badCollectorConsumer)) - sum[0], 2); |
| 82 | + badParallelStreamError += square(computeFinalSum(DoubleStream.of(rand).parallel().collect(doubleSupplier,objDoubleConsumer,badCollectorConsumer)) - sum[0]); |
86 | 83 |
|
87 | 84 |
|
88 | 85 | }
|
89 | 86 |
|
90 |
| - Assert.assertEquals(goodSequentialStreamError, 0.0); |
91 |
| - Assert.assertEquals(goodSequentialStreamError, jdkSequentialStreamError); |
92 |
| - |
93 | 87 | Assert.assertTrue(jdkParallelStreamError <= goodParallelStreamError);
|
94 |
| - Assert.assertTrue(badParallelStreamError > goodParallelStreamError); |
| 88 | + Assert.assertTrue(badParallelStreamError > jdkParallelStreamError); |
95 | 89 |
|
| 90 | + Assert.assertTrue(goodSequentialStreamError >= jdkSequentialStreamError); |
96 | 91 | Assert.assertTrue(naive > jdkSequentialStreamError);
|
97 | 92 | Assert.assertTrue(naive > jdkParallelStreamError);
|
98 | 93 |
|
99 | 94 | }
|
100 | 95 |
|
| 96 | + private static double square(double arg) { |
| 97 | + return arg * arg; |
| 98 | + } |
| 99 | + |
101 | 100 | // from OpenJDK8 Collectors, unmodified
|
102 | 101 | static double[] sumWithCompensation(double[] intermediateSum, double value) {
|
103 | 102 | double tmp = value - intermediateSum[1];
|
|
0 commit comments