< prev index next >

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

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


 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 }
< prev index next >