18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/* 28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166 38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at 48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/ 58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166; 88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 98e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport static java.util.concurrent.TimeUnit.SECONDS; 108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.HashSet; 128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.CancellationException; 138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ExecutionException; 148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ForkJoinPool; 158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ForkJoinTask; 168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.RecursiveTask; 178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.TimeoutException; 188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test; 208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite; 218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class RecursiveTaskTest extends JSR166TestCase { 238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // android-note: Removed because the CTS runner does a bad job of 258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // retrying tests that have suite() declarations. 268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static void main(String[] args) { 288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // main(suite(), args); 298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static Test suite() { 31b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak // return new TestSuite(RecursiveTaskTest.class); 328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private static ForkJoinPool mainPool() { 358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return new ForkJoinPool(); 368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private static ForkJoinPool singletonPool() { 398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return new ForkJoinPool(1); 408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private static ForkJoinPool asyncSingletonPool() { 438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return new ForkJoinPool(1, 448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinPool.defaultForkJoinWorkerThreadFactory, 458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle null, true); 468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private <T> T testInvokeOnPool(ForkJoinPool pool, RecursiveTask<T> a) { 49b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak try (PoolCleaner cleaner = cleaner(pool)) { 508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(a); 518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle T result = pool.invoke(a); 538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(a, result); 558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return result; 568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkNotDone(RecursiveTask a) { 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isDone()); 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedNormally()); 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedAbnormally()); 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCancelled()); 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getException()); 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (! ForkJoinTask.inForkJoinPool()) { 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(); 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) { 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(5L, SECONDS); 788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) { 808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(0L, SECONDS); 858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (TimeoutException success) { 878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle <T> void checkCompletedNormally(RecursiveTask<T> a, T expected) { 918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isDone()); 928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCancelled()); 938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCompletedNormally()); 948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedAbnormally()); 958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getException()); 968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(expected, a.getRawResult()); 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(expected, a.join()); 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(false)); 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(true)); 1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(expected, a.get()); 1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(expected, a.get(5L, SECONDS)); 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Waits for the task to complete, and checks that when it does, 1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * it will have an Integer result equals to the given int. 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCompletesNormally(RecursiveTask<Integer> a, int expected) { 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = a.join(); 1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(expected, (int) r); 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(a, r); 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Like checkCompletesNormally, but verifies that the task has 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * already completed. 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCompletedNormally(RecursiveTask<Integer> a, int expected) { 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = a.getRawResult(); 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(expected, (int) r); 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(a, r); 1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCancelled(RecursiveTask a) { 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isDone()); 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCancelled()); 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedNormally()); 1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCompletedAbnormally()); 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.getException() instanceof CancellationException); 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.join(); 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(); 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(5L, SECONDS); 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCompletedAbnormally(RecursiveTask a, Throwable t) { 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isDone()); 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCancelled()); 1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedNormally()); 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCompletedAbnormally()); 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), a.getException().getClass()); 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(false)); 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(true)); 1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.join(); 1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable expected) { 1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), expected.getClass()); 1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(); 1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), success.getCause().getClass()); 1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(5L, SECONDS); 1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), success.getCause().getClass()); 1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public static final class FJException extends RuntimeException { 1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public FJException() { super(); } 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // An invalid return value for Fib 1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle static final Integer NoResult = Integer.valueOf(-17); 1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // A simple recursive task for testing 1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final class FibTask extends CheckedRecursiveTask<Integer> { 1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int number; 1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask(int n) { number = n; } 1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = number; 2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (n <= 1) 2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return n; 2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f1 = new FibTask(n - 1); 2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f1.fork(); 2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return (new FibTask(n - 2)).compute() + f1.join(); 2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void publicSetRawResult(Integer result) { 2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle setRawResult(result); 2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // A recursive action failing in base case 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final class FailingFibTask extends RecursiveTask<Integer> { 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int number; 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int result; 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask(int n) { number = n; } 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer compute() { 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = number; 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (n <= 1) 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle throw new FJException(); 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f1 = new FailingFibTask(n - 1); 2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f1.fork(); 2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return (new FibTask(n - 2)).compute() + f1.join(); 2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke returns value when task completes normally. 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isCompletedAbnormally and isCancelled return false for normally 2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed tasks. getRawResult of a completed non-null task 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * returns value; 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvoke() { 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.invoke(); 2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) r); 2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, r); 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return r; 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) testInvokeOnPool(mainPool(), a)); 2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyInvoke task returns when task completes normally. 2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isCompletedAbnormally and isCancelled return false for normally 2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed tasks 2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testQuietlyInvoke() { 2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyInvoke(); 2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task returns when task completes 2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkJoin() { 2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.join(); 2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) r); 2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, r); 2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return r; 2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) testInvokeOnPool(mainPool(), a)); 2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task returns when task completes 2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkGet() { 2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() throws Exception { 2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.get(); 2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) r); 2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, r); 2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return r; 2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) testInvokeOnPool(mainPool(), a)); 2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task returns when task completes 2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkTimedGet() { 2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() throws Exception { 2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.get(5L, SECONDS); 3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) r); 3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, r); 3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return r; 3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) testInvokeOnPool(mainPool(), a)); 3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task completes 3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkQuietlyJoin() { 3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.getRawResult(); 3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) r); 3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, r); 3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return r; 3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) testInvokeOnPool(mainPool(), a)); 3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * helpQuiesce returns when tasks are complete. 3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getQueuedTaskCount returns 0 when quiescent 3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkHelpQuiesce() { 3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 336b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak while (!f.isDone()) // wait out race 337b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ; 3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, getQueuedTaskCount()); 3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception when task completes abnormally 3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvoke() { 3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.invoke(); 3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyInvoke task returns when task completes abnormally 3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalQuietlyInvoke() { 3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyInvoke(); 3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.getException() instanceof FJException); 3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, f.getException()); 3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task throws exception when task completes abnormally 3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkJoin() { 3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.join(); 3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task throws exception when task completes abnormally 3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkGet() { 4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() throws Exception { 4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.get(); 4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Throwable cause = success.getCause(); 4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(cause instanceof FJException); 4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, cause); 4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task throws exception when task completes abnormally 4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkTimedGet() { 4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() throws Exception { 4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.get(5L, SECONDS); 4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Throwable cause = success.getCause(); 4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(cause instanceof FJException); 4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, cause); 4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task completes abnormally 4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkQuietlyJoin() { 4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.getException() instanceof FJException); 4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, f.getException()); 4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception when task cancelled 4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledInvoke() { 4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.invoke(); 4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task throws exception when task cancelled 4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkJoin() { 4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.join(); 4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task throws exception when task cancelled 4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkGet() { 4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() throws Exception { 5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.get(); 5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task throws exception when task cancelled 5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkTimedGet() { 5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() throws Exception { 5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.get(5L, SECONDS); 5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task cancelled 5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkQuietlyJoin() { 5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getPool of executing task returns its pool 5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetPool() { 5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ForkJoinPool mainPool = mainPool(); 5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(mainPool, getPool()); 5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool, a)); 5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getPool of non-FJ task returns null 5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetPool2() { 5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(getPool()); 5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, a.invoke()); 5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * inForkJoinPool of executing task returns true 5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInForkJoinPool() { 5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(inForkJoinPool()); 5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * inForkJoinPool of non-FJ task returns false 5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInForkJoinPool2() { 5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(inForkJoinPool()); 5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, a.invoke()); 5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * The value set by setRawResult is returned by getRawResult 6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetRawResult() { 6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle setRawResult(NoResult); 6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, getRawResult()); 6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }; 6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, a.invoke()); 6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A reinitialized normally completed task may be re-invoked 6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testReinitialize() { 6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 3; i++) { 6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.invoke(); 6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) r); 6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, r); 6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.reinitialize(); 6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.publicSetRawResult(null); 6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A reinitialized abnormally completed task may be re-invoked 6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testReinitializeAbnormal() { 6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 3; i++) { 6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.invoke(); 6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.reinitialize(); 6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception after invoking completeExceptionally 6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompleteExceptionally() { 6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.completeExceptionally(new FJException()); 6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.invoke(); 6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task suppresses execution invoking complete 6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testComplete() { 6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.complete(NoResult); 6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer r = f.invoke(); 6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, r); 6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, NoResult); 6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return r; 6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(t1, t2) invokes all task arguments 6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll2() { 6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g); 7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with 1 argument invokes task 7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll1() { 7148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f); 7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 7228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with > 2 argument invokes tasks 7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll3() { 7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask h = new FibTask(7); 7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.isDone()); 7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(g.isDone()); 7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(h.isDone()); 7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h, 13); 7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(collection) invokes all tasks in the collection 7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAllCollection() { 7498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 7528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 7538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask h = new FibTask(7); 7548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle HashSet set = new HashSet(); 7558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(f); 7568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(g); 7578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(h); 7588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(set); 7598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.isDone()); 7608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(g.isDone()); 7618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(h.isDone()); 7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h, 13); 7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with any null task throws NPE 7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAllNPE() { 7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask h = null; 7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(t1, t2) throw exception if any task does 7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll2() { 7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 7958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask g = new FailingFibTask(9); 7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g); 7988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 8008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 8018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 8038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 8058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with 1 argument throws exception if task does 8098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll1() { 8118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 8128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 8138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask g = new FailingFibTask(9); 8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(g); 8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 8238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with > 2 argument throws exception if any task does 8278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll3() { 8298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 8308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 8318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 8328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask g = new FailingFibTask(9); 8338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask h = new FibTask(7); 8348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 8368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(collection) throws exception if any task does 8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAllCollection() { 8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingFibTask f = new FailingFibTask(8); 8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask h = new FibTask(7); 8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle HashSet set = new HashSet(); 8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(f); 8568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(g); 8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(h); 8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(set); 8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 8638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(mainPool(), a)); 8678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * tryUnfork returns true for most recent unexecuted task, 8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * and suppresses execution 8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTryUnfork() { 8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.tryUnfork()); 8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(singletonPool(), a)); 8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getSurplusQueuedTaskCount returns > 0 when 8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * there are more tasks than threads 8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetSurplusQueuedTaskCount() { 8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask h = new FibTask(7); 8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(h, h.fork()); 8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(getSurplusQueuedTaskCount() > 0); 9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, getSurplusQueuedTaskCount()); 9058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 9068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 9078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h, 13); 9088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 9098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(singletonPool(), a)); 9118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * peekNextLocalTask returns most recent unexecuted task. 9158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPeekNextLocalTask() { 9178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 9188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 9198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 9208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 9218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 9228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 9238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, peekNextLocalTask()); 9248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletesNormally(f, 21); 9258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 9268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 9278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 9288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(singletonPool(), a)); 9308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollNextLocalTask returns most recent unexecuted task 9348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * without executing it 9358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollNextLocalTask() { 9378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 9388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 9398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 9408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 9418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 9428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 9438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, pollNextLocalTask()); 9448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 9458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 9468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 9478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 9488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(singletonPool(), a)); 9508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollTask returns an unexecuted task without executing it 9548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollTask() { 9568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 9578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 9588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 9598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 9608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 9618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 9628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, pollTask()); 9638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 9648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 9658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 9668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 9678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(singletonPool(), a)); 9698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * peekNextLocalTask returns least recent unexecuted task in async mode 9738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPeekNextLocalTaskAsync() { 9758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 9768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 9778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 9788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 9798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 9808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 9818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, peekNextLocalTask()); 9828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, (int) f.join()); 9838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 9848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 9858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g, 34); 9868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 9878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(asyncSingletonPool(), a)); 9898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollNextLocalTask returns least recent unexecuted task without 9938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * executing it, in async mode 9948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollNextLocalTaskAsync() { 9968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 9978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 9988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 9998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 10008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 10018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 10028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, pollNextLocalTask()); 10038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 10048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 10058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(g); 10068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 10078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(asyncSingletonPool(), a)); 10098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollTask returns an unexecuted task without executing it, in 10138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * async mode 10148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollTaskAsync() { 10168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() { 10178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Integer realCompute() { 10188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask g = new FibTask(9); 10198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 10208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FibTask f = new FibTask(8); 10218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 10228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, pollTask()); 10238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 10248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f, 21); 10258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(g); 10268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return NoResult; 10278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(NoResult, testInvokeOnPool(asyncSingletonPool(), a)); 10298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 1032