< prev index next >

test/jdk/java/util/concurrent/tck/DoubleAccumulatorTest.java

Print this page
8225490: Miscellaneous changes imported from jsr166 CVS 2019-09
Reviewed-by: martin, alanb


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


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