--- jsr166/src/test/tck/ForkJoinTaskTest.java 2010/09/13 07:22:29 1.12 +++ jsr166/src/test/tck/ForkJoinTaskTest.java 2010/09/13 07:51:18 1.14 @@ -3,27 +3,16 @@ * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ -import java.util.*; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.AbstractExecutorService; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.Callable; -import java.util.concurrent.Future; import java.util.concurrent.ExecutionException; import java.util.concurrent.CancellationException; -import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.ForkJoinWorkerThread; import java.util.concurrent.RecursiveAction; -import java.util.concurrent.RecursiveTask; -import java.util.concurrent.TimeUnit; -import junit.framework.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.*; import java.util.*; +import junit.framework.*; public class ForkJoinTaskTest extends JSR166TestCase { @@ -35,7 +24,29 @@ public class ForkJoinTaskTest extends JS return new TestSuite(ForkJoinTaskTest.class); } - /** + private static ForkJoinPool mainPool() { + return new ForkJoinPool(); + } + + private static ForkJoinPool singletonPool() { + return new ForkJoinPool(1); + } + + private static ForkJoinPool asyncSingletonPool() { + return new ForkJoinPool(1, + ForkJoinPool.defaultForkJoinWorkerThreadFactory, + null, true); + } + + private void testInvokeOnPool(ForkJoinPool pool, RecursiveAction a) { + try { + assertTrue(pool.invoke(a) == null); + } finally { + joinPool(pool); + } + } + + /* * Testing coverage notes: * * To test extension methods and overrides, most tests use @@ -43,11 +54,6 @@ public class ForkJoinTaskTest extends JS * differently than supplied Recursive forms. */ - static final ForkJoinPool mainPool = new ForkJoinPool(); - static final ForkJoinPool singletonPool = new ForkJoinPool(1); - static final ForkJoinPool asyncSingletonPool = - new ForkJoinPool(1, ForkJoinPool.defaultForkJoinWorkerThreadFactory, - null, true); static final class FJException extends RuntimeException { FJException() { super(); } } @@ -237,7 +243,7 @@ public class ForkJoinTaskTest extends JS threadAssertFalse(f.isCompletedAbnormally()); threadAssertTrue(f.getRawResult() == null); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -256,7 +262,7 @@ public class ForkJoinTaskTest extends JS threadAssertFalse(f.isCompletedAbnormally()); threadAssertTrue(f.getRawResult() == null); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -272,7 +278,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isDone()); threadAssertTrue(f.getRawResult() == null); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -291,7 +297,7 @@ public class ForkJoinTaskTest extends JS unexpectedException(ex); } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -310,7 +316,7 @@ public class ForkJoinTaskTest extends JS unexpectedException(ex); } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -329,7 +335,7 @@ public class ForkJoinTaskTest extends JS unexpectedException(ex); } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -344,7 +350,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.number == 21); threadAssertTrue(f.isDone()); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } @@ -362,7 +368,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isDone()); threadAssertTrue(getQueuedTaskCount() == 0); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } @@ -379,7 +385,7 @@ public class ForkJoinTaskTest extends JS } catch (FJException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -392,7 +398,7 @@ public class ForkJoinTaskTest extends JS f.quietlyInvoke(); threadAssertTrue(f.isDone()); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -409,7 +415,7 @@ public class ForkJoinTaskTest extends JS } catch (FJException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -428,7 +434,7 @@ public class ForkJoinTaskTest extends JS unexpectedException(ex); } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -447,7 +453,7 @@ public class ForkJoinTaskTest extends JS unexpectedException(ex); } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -463,7 +469,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isCompletedAbnormally()); threadAssertTrue(f.getException() instanceof FJException); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -480,7 +486,7 @@ public class ForkJoinTaskTest extends JS } catch (CancellationException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -498,7 +504,7 @@ public class ForkJoinTaskTest extends JS } catch (CancellationException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -518,7 +524,7 @@ public class ForkJoinTaskTest extends JS unexpectedException(ex); } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -538,7 +544,7 @@ public class ForkJoinTaskTest extends JS unexpectedException(ex); } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -555,18 +561,19 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isCompletedAbnormally()); threadAssertTrue(f.getException() instanceof CancellationException); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** * getPool of executing task returns its pool */ public void testGetPool() { + final ForkJoinPool mainPool = mainPool(); RecursiveAction a = new RecursiveAction() { public void compute() { threadAssertTrue(getPool() == mainPool); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool, a); } /** @@ -588,7 +595,7 @@ public class ForkJoinTaskTest extends JS public void compute() { threadAssertTrue(inForkJoinPool()); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -627,7 +634,7 @@ public class ForkJoinTaskTest extends JS } catch (FJException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -644,7 +651,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(g.isDone()); threadAssertTrue(g.number == 34); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -658,7 +665,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isDone()); threadAssertTrue(f.number == 21); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -678,7 +685,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(h.isDone()); threadAssertTrue(h.number == 13); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -702,7 +709,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(h.isDone()); threadAssertTrue(h.number == 13); }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } @@ -721,7 +728,7 @@ public class ForkJoinTaskTest extends JS } catch (NullPointerException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -738,7 +745,7 @@ public class ForkJoinTaskTest extends JS } catch (FJException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -754,7 +761,7 @@ public class ForkJoinTaskTest extends JS } catch (FJException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -772,7 +779,7 @@ public class ForkJoinTaskTest extends JS } catch (FJException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -794,7 +801,7 @@ public class ForkJoinTaskTest extends JS } catch (FJException success) { } }}; - mainPool.invoke(a); + testInvokeOnPool(mainPool(), a); } /** @@ -813,7 +820,7 @@ public class ForkJoinTaskTest extends JS threadAssertFalse(f.isDone()); threadAssertTrue(g.isDone()); }}; - singletonPool.invoke(a); + testInvokeOnPool(singletonPool(), a); } /** @@ -832,7 +839,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(getSurplusQueuedTaskCount() > 0); helpQuiesce(); }}; - singletonPool.invoke(a); + testInvokeOnPool(singletonPool(), a); } /** @@ -850,7 +857,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isDone()); helpQuiesce(); }}; - singletonPool.invoke(a); + testInvokeOnPool(singletonPool(), a); } /** @@ -868,7 +875,7 @@ public class ForkJoinTaskTest extends JS helpQuiesce(); threadAssertFalse(f.isDone()); }}; - singletonPool.invoke(a); + testInvokeOnPool(singletonPool(), a); } /** @@ -887,7 +894,7 @@ public class ForkJoinTaskTest extends JS threadAssertFalse(f.isDone()); threadAssertTrue(g.isDone()); }}; - singletonPool.invoke(a); + testInvokeOnPool(singletonPool(), a); } /** @@ -905,7 +912,7 @@ public class ForkJoinTaskTest extends JS helpQuiesce(); threadAssertTrue(f.isDone()); }}; - asyncSingletonPool.invoke(a); + testInvokeOnPool(asyncSingletonPool(), a); } /** @@ -924,7 +931,7 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isDone()); threadAssertFalse(g.isDone()); }}; - asyncSingletonPool.invoke(a); + testInvokeOnPool(asyncSingletonPool(), a); } /** @@ -943,6 +950,6 @@ public class ForkJoinTaskTest extends JS threadAssertTrue(f.isDone()); threadAssertFalse(g.isDone()); }}; - asyncSingletonPool.invoke(a); + testInvokeOnPool(asyncSingletonPool(), a); } }