133 }
134
135 /**
136 * doubleValue returns current value.
137 */
138 public void testDoubleValue() {
139 LongAccumulator acc = new LongAccumulator(Long::max, 0L);
140 assertEquals(0.0, acc.doubleValue());
141 acc.accumulate(1);
142 assertEquals(1.0, acc.doubleValue());
143 }
144
145 /**
146 * accumulates by multiple threads produce correct result
147 */
148 public void testAccumulateAndGetMT() {
149 final LongAccumulator acc
150 = new LongAccumulator((x, y) -> x + y, 0L);
151 final int nThreads = ThreadLocalRandom.current().nextInt(1, 5);
152 final Phaser phaser = new Phaser(nThreads + 1);
153 final int incs = 1_000_000;
154 final long total = nThreads * incs/2L * (incs - 1); // Gauss
155 final Runnable task = () -> {
156 phaser.arriveAndAwaitAdvance();
157 for (int i = 0; i < incs; i++) {
158 acc.accumulate((long) i);
159 assertTrue(acc.get() <= total);
160 }
161 phaser.arrive();
162 };
163 final ExecutorService p = Executors.newCachedThreadPool();
164 try (PoolCleaner cleaner = cleaner(p)) {
165 for (int i = nThreads; i-->0; )
166 p.execute(task);
167 phaser.arriveAndAwaitAdvance();
168 phaser.arriveAndAwaitAdvance();
169 assertEquals(total, acc.get());
170 }
171 }
172
173 }
|
133 }
134
135 /**
136 * doubleValue returns current value.
137 */
138 public void testDoubleValue() {
139 LongAccumulator acc = new LongAccumulator(Long::max, 0L);
140 assertEquals(0.0, acc.doubleValue());
141 acc.accumulate(1);
142 assertEquals(1.0, acc.doubleValue());
143 }
144
145 /**
146 * accumulates by multiple threads produce correct result
147 */
148 public void testAccumulateAndGetMT() {
149 final LongAccumulator acc
150 = new LongAccumulator((x, y) -> x + y, 0L);
151 final int nThreads = ThreadLocalRandom.current().nextInt(1, 5);
152 final Phaser phaser = new Phaser(nThreads + 1);
153 final int incs = expensiveTests ? 1_000_000 : 100_000;
154 final long total = nThreads * incs/2L * (incs - 1); // Gauss
155 final Runnable task = () -> {
156 phaser.arriveAndAwaitAdvance();
157 for (int i = 0; i < incs; i++) {
158 acc.accumulate((long) i);
159 assertTrue(acc.get() <= total);
160 }
161 phaser.arrive();
162 };
163 final ExecutorService p = Executors.newCachedThreadPool();
164 try (PoolCleaner cleaner = cleaner(p)) {
165 for (int i = nThreads; i-->0; )
166 p.execute(task);
167 phaser.arriveAndAwaitAdvance();
168 phaser.arriveAndAwaitAdvance();
169 assertEquals(total, acc.get());
170 }
171 }
172
173 }
|