--- jsr166/src/test/tck/PhaserTest.java 2011/06/27 04:07:51 1.34 +++ jsr166/src/test/tck/PhaserTest.java 2014/12/31 16:44:02 1.38 @@ -12,8 +12,6 @@ import java.util.concurrent.Phaser; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeoutException; import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static java.util.concurrent.TimeUnit.NANOSECONDS; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; public class PhaserTest extends JSR166TestCase { @@ -191,17 +189,28 @@ public class PhaserTest extends JSR166Te /** * register on a subphaser that is currently empty succeeds, even * in the presence of another non-empty subphaser - * XXXX broken (hangs) as of 2011-06-26 */ - public void XXXXtestRegisterEmptySubPhaser() { + public void testRegisterEmptySubPhaser() { Phaser root = new Phaser(); Phaser child1 = new Phaser(root, 1); Phaser child2 = new Phaser(root, 0); assertEquals(0, child2.register()); + assertState(root, 0, 2, 2); + assertState(child1, 0, 1, 1); + assertState(child2, 0, 1, 1); assertEquals(0, child2.arriveAndDeregister()); + assertState(root, 0, 1, 1); + assertState(child1, 0, 1, 1); + assertState(child2, 0, 0, 0); assertEquals(0, child2.register()); assertEquals(0, child2.arriveAndDeregister()); + assertState(root, 0, 1, 1); + assertState(child1, 0, 1, 1); assertState(child2, 0, 0, 0); + assertEquals(0, child1.arriveAndDeregister()); + assertTerminated(root, 1); + assertTerminated(child1, 1); + assertTerminated(child2, 1); } /** @@ -617,7 +626,7 @@ public class PhaserTest extends JSR166Te count.incrementAndGet(); assertEquals(2*k+1, phaser.arrive()); assertEquals(2*k+2, phaser.awaitAdvance(2*k+1)); - assertEquals(count.get(), 4*(k+1)); + assertEquals(4*(k+1), count.get()); }}})); for (Thread thread : threads)