--- jsr166/src/test/tck/LongAdderTest.java 2013/03/22 16:10:19 1.2 +++ jsr166/src/test/tck/LongAdderTest.java 2018/01/28 17:38:18 1.9 @@ -4,13 +4,17 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ -import junit.framework.*; -import java.util.concurrent.*; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.LongAdder; +import junit.framework.Test; +import junit.framework.TestSuite; + public class LongAdderTest extends JSR166TestCase { public static void main(String[] args) { - junit.textui.TestRunner.run(suite()); + main(suite(), args); } public static Test suite() { return new TestSuite(LongAdderTest.class); @@ -38,7 +42,7 @@ public class LongAdderTest extends JSR16 /** * decrement decrements and sum returns current value */ - public void testDecrementAndsum() { + public void testDecrementAndSum() { LongAdder ai = new LongAdder(); ai.decrement(); assertEquals(-1, ai.sum()); @@ -49,7 +53,7 @@ public class LongAdderTest extends JSR16 /** * incrementAndGet increments and returns current value */ - public void testIncrementAndsum() { + public void testIncrementAndSum() { LongAdder ai = new LongAdder(); ai.increment(); assertEquals(1, ai.sum()); @@ -58,7 +62,7 @@ public class LongAdderTest extends JSR16 } /** - * reset zeroes sum + * reset() causes subsequent sum() to return zero */ public void testReset() { LongAdder ai = new LongAdder(); @@ -69,7 +73,7 @@ public class LongAdderTest extends JSR16 } /** - * sumThenReset returns sum then zeros + * sumThenReset() returns sum; subsequent sum() returns zero */ public void testSumThenReset() { LongAdder ai = new LongAdder(); @@ -80,14 +84,15 @@ public class LongAdderTest extends JSR16 } /** - * a deserialized serialized adder holds same value + * a deserialized/reserialized adder holds same value */ public void testSerialization() throws Exception { LongAdder x = new LongAdder(); LongAdder y = serialClone(x); - assertTrue(x != y); + assertNotSame(x, y); x.add(-22); LongAdder z = serialClone(x); + assertNotSame(y, z); assertEquals(-22, x.sum()); assertEquals(0, y.sum()); assertEquals(-22, z.sum()); @@ -146,16 +151,16 @@ public class LongAdderTest extends JSR16 /** * adds by multiple threads produce correct sum */ - public void testAddAndSumMT() { + public void testAddAndSumMT() throws Throwable { final int incs = 1000000; final int nthreads = 4; final ExecutorService pool = Executors.newCachedThreadPool(); LongAdder a = new LongAdder(); - Phaser phaser = new Phaser(nthreads + 1); + CyclicBarrier barrier = new CyclicBarrier(nthreads + 1); for (int i = 0; i < nthreads; ++i) - pool.execute(new AdderTask(a, phaser, incs)); - phaser.arriveAndAwaitAdvance(); - phaser.arriveAndAwaitAdvance(); + pool.execute(new AdderTask(a, barrier, incs)); + barrier.await(); + barrier.await(); long total = (long)nthreads * incs; long sum = a.sum(); assertEquals(sum, total); @@ -164,22 +169,24 @@ public class LongAdderTest extends JSR16 static final class AdderTask implements Runnable { final LongAdder adder; - final Phaser phaser; + final CyclicBarrier barrier; final int incs; volatile long result; - AdderTask(LongAdder adder, Phaser phaser, int incs) { + AdderTask(LongAdder adder, CyclicBarrier barrier, int incs) { this.adder = adder; - this.phaser = phaser; + this.barrier = barrier; this.incs = incs; } public void run() { - phaser.arriveAndAwaitAdvance(); - LongAdder a = adder; - for (int i = 0; i < incs; ++i) - a.add(1L); - result = a.sum(); - phaser.arrive(); + try { + barrier.await(); + LongAdder a = adder; + for (int i = 0; i < incs; ++i) + a.add(1L); + result = a.sum(); + barrier.await(); + } catch (Throwable t) { throw new Error(t); } } }