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.MILLISECONDS; 108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport static java.util.concurrent.TimeUnit.SECONDS; 118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.HashSet; 138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.CancellationException; 148e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.CountedCompleter; 158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.ExecutionException; 168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ForkJoinPool; 178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ForkJoinTask; 188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.TimeoutException; 198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.atomic.AtomicInteger; 208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.atomic.AtomicReference; 218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test; 238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite; 248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class CountedCompleterTest extends JSR166TestCase { 268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // android-note: Removed because the CTS runner does a bad job of 288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // retrying tests that have suite() declarations. 298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static void main(String[] args) { 318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // main(suite(), args); 328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static Test suite() { 34b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak // return new TestSuite(CountedCompleterTest.class); 358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // Runs with "mainPool" use > 1 thread. singletonPool tests use 1 388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle static final int mainPoolSize = 398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Math.max(2, Runtime.getRuntime().availableProcessors()); 408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private static ForkJoinPool mainPool() { 428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return new ForkJoinPool(mainPoolSize); 438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private static ForkJoinPool singletonPool() { 468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return new ForkJoinPool(1); 478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private static ForkJoinPool asyncSingletonPool() { 508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return new ForkJoinPool(1, 518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinPool.defaultForkJoinWorkerThreadFactory, 528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle null, true); 538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private void testInvokeOnPool(ForkJoinPool pool, ForkJoinTask a) { 56b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak try (PoolCleaner cleaner = cleaner(pool)) { 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isDone()); 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedNormally()); 598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedAbnormally()); 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCancelled()); 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getException()); 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(pool.invoke(a)); 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isDone()); 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCompletedNormally()); 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedAbnormally()); 698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCancelled()); 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getException()); 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkNotDone(CountedCompleter a) { 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isDone()); 778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedNormally()); 788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedAbnormally()); 798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCancelled()); 808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getException()); 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 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 void checkCompletedNormally(CountedCompleter<?> a) { 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 assertNull(a.getRawResult()); 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle { 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 100b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak long startTime = System.nanoTime(); 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.join()); 102b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertTrue(millisElapsedSince(startTime) < SMALL_DELAY_MS); 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.interrupted(); 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle { 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 108b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak long startTime = System.nanoTime(); 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.quietlyJoin(); // should be no-op 110b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertTrue(millisElapsedSince(startTime) < SMALL_DELAY_MS); 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.interrupted(); 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(false)); 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(true)); 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.get()); 1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.get(5L, SECONDS)); 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCancelled(CountedCompleter a) { 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isDone()); 1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCancelled()); 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedNormally()); 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCompletedAbnormally()); 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.getException() instanceof CancellationException); 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.cancel(false)); 1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.cancel(true)); 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.join(); 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.interrupted(); 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle { 143b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak long startTime = System.nanoTime(); 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.quietlyJoin(); // should be no-op 145b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertTrue(millisElapsedSince(startTime) < SMALL_DELAY_MS); 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(); 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(5L, SECONDS); 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCompletedAbnormally(CountedCompleter a, Throwable t) { 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isDone()); 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCancelled()); 1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.isCompletedNormally()); 1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isCompletedAbnormally()); 1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), a.getException().getClass()); 1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getRawResult()); 1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(false)); 1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.cancel(true)); 1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.join(); 1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable expected) { 1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), expected.getClass()); 1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.interrupted(); 1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle { 181b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak long startTime = System.nanoTime(); 1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.quietlyJoin(); // should be no-op 183b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertTrue(millisElapsedSince(startTime) < SMALL_DELAY_MS); 1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(); 1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), success.getCause().getClass()); 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.get(5L, SECONDS); 1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(t.getClass(), success.getCause().getClass()); 1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (Throwable fail) { threadUnexpectedException(fail); } 1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.invoke(); 2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2038e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } catch (Throwable success) { 2048e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertSame(t, success); 2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public static final class FJException extends RuntimeException { 2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FJException() { super(); } 2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle abstract class CheckedCC extends CountedCompleter<Object> { 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final AtomicInteger computeN = new AtomicInteger(0); 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final AtomicInteger onCompletionN = new AtomicInteger(0); 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final AtomicInteger onExceptionalCompletionN = new AtomicInteger(0); 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final AtomicInteger setRawResultN = new AtomicInteger(0); 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final AtomicReference<Object> rawResult = new AtomicReference<Object>(null); 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int computeN() { return computeN.get(); } 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int onCompletionN() { return onCompletionN.get(); } 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int onExceptionalCompletionN() { return onExceptionalCompletionN.get(); } 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int setRawResultN() { return setRawResultN.get(); } 2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CheckedCC() { super(); } 2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CheckedCC(CountedCompleter p) { super(p); } 2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CheckedCC(CountedCompleter p, int n) { super(p, n); } 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle abstract void realCompute(); 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public final void compute() { 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle computeN.incrementAndGet(); 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle realCompute(); 2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void onCompletion(CountedCompleter caller) { 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle onCompletionN.incrementAndGet(); 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super.onCompletion(caller); 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public boolean onExceptionalCompletion(Throwable ex, 2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CountedCompleter caller) { 2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle onExceptionalCompletionN.incrementAndGet(); 2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNotNull(ex); 2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(isCompletedAbnormally()); 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(super.onExceptionalCompletion(ex, caller)); 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return true; 2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void setRawResult(Object t) { 2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle setRawResultN.incrementAndGet(); 2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle rawResult.set(t); 2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super.setRawResult(t); 2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkIncomplete() { 2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, computeN()); 2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, onCompletionN()); 2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, onExceptionalCompletionN()); 2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, setRawResultN()); 2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(this); 2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCompletes(Object rawResult) { 2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkIncomplete(); 2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int pendingCount = getPendingCount(); 2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle complete(rawResult); 2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(pendingCount, getPendingCount()); 2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, computeN()); 2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, onCompletionN()); 2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, onExceptionalCompletionN()); 2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, setRawResultN()); 2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(rawResult, this.rawResult.get()); 2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(this); 2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCompletesExceptionally(Throwable ex) { 2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkIncomplete(); 2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle completeExceptionally(ex); 2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedExceptionally(ex); 2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkCompletedExceptionally(Throwable ex) { 2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, computeN()); 2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, onCompletionN()); 2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, onExceptionalCompletionN()); 2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, setRawResultN()); 2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(this.rawResult.get()); 2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(this, ex); 2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final class NoopCC extends CheckedCC { 2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC() { super(); } 2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC(CountedCompleter p) { super(p); } 285b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak NoopCC(CountedCompleter p, int initialPendingCount) { 286b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak super(p, initialPendingCount); 287b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak } 2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() {} 2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A newly constructed CountedCompleter is not completed; 2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * complete() causes completion. pendingCount is ignored. 2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testComplete() { 2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Object x : new Object[] { Boolean.TRUE, null }) { 2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int pendingCount : new int[] { 0, 42 }) { 2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testComplete(new NoopCC(), x, pendingCount); 2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testComplete(new NoopCC(new NoopCC()), x, pendingCount); 3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void testComplete(NoopCC cc, Object x, int pendingCount) { 3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle cc.setPendingCount(pendingCount); 3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle cc.checkCompletes(x); 306b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(pendingCount, cc.getPendingCount()); 3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completeExceptionally completes exceptionally 3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompleteExceptionally() { 3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoopCC() 3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle .checkCompletesExceptionally(new FJException()); 3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoopCC(new NoopCC()) 3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle .checkCompletesExceptionally(new FJException()); 3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 320b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak * completeExceptionally(null) surprisingly has the same effect as 321b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak * completeExceptionally(new RuntimeException()) 3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompleteExceptionally_null() { 324b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak NoopCC a = new NoopCC(); 325b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak a.completeExceptionally(null); 3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 327b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak a.invoke(); 3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 329b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak } catch (RuntimeException success) { 330b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertSame(success.getClass(), RuntimeException.class); 331b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertNull(success.getCause()); 332b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak a.checkCompletedExceptionally(success); 333b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak } 3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setPendingCount sets the reported pending count 3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetPendingCount() { 3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getPendingCount()); 342b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak int[] vals = { 343b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak -1, 0, 1, 344b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak Integer.MIN_VALUE, 345b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak Integer.MAX_VALUE, 346b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak }; 347b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak for (int val : vals) { 348b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak a.setPendingCount(val); 349b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(val, a.getPendingCount()); 350b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak } 3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addToPendingCount adds to the reported pending count 3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddToPendingCount() { 3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getPendingCount()); 3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.addToPendingCount(1); 3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.getPendingCount()); 3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.addToPendingCount(27); 3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(28, a.getPendingCount()); 363b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak a.addToPendingCount(-28); 364b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(0, a.getPendingCount()); 3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * decrementPendingCountUnlessZero decrements reported pending 3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * count unless zero 3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 371b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak public void testDecrementPendingCountUnlessZero() { 372b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak NoopCC a = new NoopCC(null, 2); 373b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(2, a.getPendingCount()); 374b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(2, a.decrementPendingCountUnlessZero()); 3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.getPendingCount()); 376b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(1, a.decrementPendingCountUnlessZero()); 3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getPendingCount()); 378b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(0, a.decrementPendingCountUnlessZero()); 3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getPendingCount()); 380b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak a.setPendingCount(-1); 381b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(-1, a.decrementPendingCountUnlessZero()); 382b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(-2, a.getPendingCount()); 3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * compareAndSetPendingCount compares and sets the reported 3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pending count 3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompareAndSetPendingCount() { 3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getPendingCount()); 3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.compareAndSetPendingCount(0, 1)); 3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.getPendingCount()); 3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.compareAndSetPendingCount(1, 2)); 3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, a.getPendingCount()); 3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.compareAndSetPendingCount(1, 3)); 3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, a.getPendingCount()); 3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getCompleter returns parent or null if at root 4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetCompleter() { 4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.getCompleter()); 4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CountedCompleter b = new NoopCC(a); 4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a, b.getCompleter()); 4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CountedCompleter c = new NoopCC(b); 4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(b, c.getCompleter()); 4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getRoot returns self if no parent, else parent's root 4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetRoot() { 4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC b = new NoopCC(a); 4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC c = new NoopCC(b); 4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a, a.getRoot()); 4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a, b.getRoot()); 4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a, c.getRoot()); 4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * tryComplete decrements pending count unless zero, in which case 4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * causes completion 4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTryComplete() { 4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getPendingCount()); 4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = 3; 4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.setPendingCount(n); 4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (; n > 0; n--) { 4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(n, a.getPendingCount()); 4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.tryComplete(); 4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.checkIncomplete(); 4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(n - 1, a.getPendingCount()); 4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.tryComplete(); 4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.computeN()); 4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.onCompletionN()); 4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.onExceptionalCompletionN()); 4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.setRawResultN()); 4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(a); 4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * propagateCompletion decrements pending count unless zero, in 4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * which case causes completion, without invoking onCompletion 4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPropagateCompletion() { 4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getPendingCount()); 4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = 3; 4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.setPendingCount(n); 4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (; n > 0; n--) { 4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(n, a.getPendingCount()); 4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.propagateCompletion(); 4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.checkIncomplete(); 4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(n - 1, a.getPendingCount()); 4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.propagateCompletion(); 4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.computeN()); 4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.onCompletionN()); 4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.onExceptionalCompletionN()); 4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.setRawResultN()); 4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(a); 4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * firstComplete returns this if pending count is zero else null 4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testFirstComplete() { 4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.setPendingCount(1); 4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.firstComplete()); 4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.checkIncomplete(); 4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a, a.firstComplete()); 4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.checkIncomplete(); 4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * firstComplete.nextComplete returns parent if pending count is 4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * zero else null 4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testNextComplete() { 4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC b = new NoopCC(a); 4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.setPendingCount(1); 4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle b.setPendingCount(1); 4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(b.firstComplete()); 4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(b, b.firstComplete()); 4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(b.nextComplete()); 4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.checkIncomplete(); 4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle b.checkIncomplete(); 4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a, b.nextComplete()); 4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a, b.nextComplete()); 4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.checkIncomplete(); 4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle b.checkIncomplete(); 5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.nextComplete()); 5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle b.checkIncomplete(); 5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(a); 5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 506b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak * quietlyCompleteRoot completes root task and only root task 5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testQuietlyCompleteRoot() { 5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC a = new NoopCC(); 5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC b = new NoopCC(a); 5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle NoopCC c = new NoopCC(b); 5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.setPendingCount(1); 5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle b.setPendingCount(1); 5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle c.setPendingCount(1); 5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle c.quietlyCompleteRoot(); 5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.isDone()); 5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(b.isDone()); 5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(c.isDone()); 5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // Invocation tests use some interdependent task classes 5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // to better test propagation etc 5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath /** 5258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * Version of Fibonacci with different classes for left vs right forks 5268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath */ 5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle abstract class CCF extends CheckedCC { 5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int number; 5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int rnumber; 5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public CCF(CountedCompleter parent, int n) { 5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super(parent, 1); 5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle this.number = n; 5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected final void realCompute() { 5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = this; 5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = number; 5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (n >= 2) { 5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new RCCF(f, n - 2).fork(); 5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f = new LCCF(f, --n); 5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.complete(null); 5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final class LCCF extends CCF { 5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public LCCF(int n) { this(null, n); } 5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public LCCF(CountedCompleter parent, int n) { 5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super(parent, n); 5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public final void onCompletion(CountedCompleter caller) { 5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super.onCompletion(caller); 5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF p = (CCF)getCompleter(); 5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = number + rnumber; 5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (p != null) 5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.number = n; 5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle else 5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle number = n; 5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final class RCCF extends CCF { 5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public RCCF(CountedCompleter parent, int n) { 5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super(parent, n); 5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public final void onCompletion(CountedCompleter caller) { 5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super.onCompletion(caller); 5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF p = (CCF)getCompleter(); 5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = number + rnumber; 5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (p != null) 5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.rnumber = n; 5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle else 5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle number = n; 5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // Version of CCF with forced failure in left completions 5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle abstract class FailingCCF extends CheckedCC { 5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int number; 5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int rnumber; 5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public FailingCCF(CountedCompleter parent, int n) { 5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super(parent, 1); 5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle this.number = n; 5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected final void realCompute() { 5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = this; 5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = number; 5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (n >= 2) { 5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new RFCCF(f, n - 2).fork(); 5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f = new LFCCF(f, --n); 5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.complete(null); 5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final class LFCCF extends FailingCCF { 5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public LFCCF(int n) { this(null, n); } 6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public LFCCF(CountedCompleter parent, int n) { 6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super(parent, n); 6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public final void onCompletion(CountedCompleter caller) { 6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super.onCompletion(caller); 6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF p = (FailingCCF)getCompleter(); 6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int n = number + rnumber; 6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (p != null) 6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.number = n; 6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle else 6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle number = n; 6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final class RFCCF extends FailingCCF { 6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public RFCCF(CountedCompleter parent, int n) { 6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super(parent, n); 6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public final void onCompletion(CountedCompleter caller) { 6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super.onCompletion(caller); 6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle completeExceptionally(new FJException()); 6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke returns when task completes normally. 6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isCompletedAbnormally and isCancelled return false for normally 6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed tasks; getRawResult returns null. 6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvoke() { 6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.invoke()); 6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyInvoke task returns when task completes normally. 6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isCompletedAbnormally and isCancelled return false for normally 6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed tasks 6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testQuietlyInvoke() { 6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyInvoke(); 6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task returns when task completes 6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkJoin() { 6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.join()); 6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task returns when task completes 6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkGet() { 6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.get()); 6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task returns when task completes 6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkTimedGet() { 6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.get(LONG_DELAY_MS, MILLISECONDS)); 6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get with null time unit throws NPE 7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkTimedGetNPE() { 7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(5L, null); 7108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 7148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task completes 7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkQuietlyJoin() { 7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 7228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * helpQuiesce returns when tasks are complete. 7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getQueuedTaskCount returns 0 when quiescent 7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkHelpQuiesce() { 7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, getQueuedTaskCount()); 7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception when task completes abnormally 7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvoke() { 7528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 7538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 7548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 7558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.invoke(); 7578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 7598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 7608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyInvoke task returns when task completes abnormally 7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalQuietlyInvoke() { 7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyInvoke(); 7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.getException() instanceof FJException); 7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, f.getException()); 7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task throws exception when task completes abnormally 7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkJoin() { 7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.join(); 7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 7958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task throws exception when task completes abnormally 7998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkGet() { 8018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 8028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 8038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 8048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 8058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(); 8078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 8098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Throwable cause = success.getCause(); 8108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(cause instanceof FJException); 8118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, cause); 8128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task throws exception when task completes abnormally 8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkTimedGet() { 8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 8228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 8238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 8248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 8258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(LONG_DELAY_MS, MILLISECONDS); 8278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 8298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Throwable cause = success.getCause(); 8308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(cause instanceof FJException); 8318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, cause); 8328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 8358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task completes abnormally 8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkQuietlyJoin() { 8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.getException() instanceof FJException); 8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, f.getException()); 8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception when task cancelled 8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledInvoke() { 8568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.invoke(); 8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task throws exception when task cancelled 8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkJoin() { 8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.join(); 8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task throws exception when task cancelled 8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkGet() { 8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(); 9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 9068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task throws exception when task cancelled 9108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkTimedGet() throws Exception { 9128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 9138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 9148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 9158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 9168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 9178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(LONG_DELAY_MS, MILLISECONDS); 9198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 9218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 9228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 9258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task cancelled 9298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkQuietlyJoin() { 9318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 9328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 9338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 9348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 9358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 9368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 9378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 9388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 9408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getPool of executing task returns its pool 9448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetPool() { 9468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ForkJoinPool mainPool = mainPool(); 9478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 9488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 9498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(mainPool, getPool()); 9508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool, a); 9528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getPool of non-FJ task returns null 9568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetPool2() { 9588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 9598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 9608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(getPool()); 9618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.invoke()); 9638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * inForkJoinPool of executing task returns true 9678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInForkJoinPool() { 9698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 9708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 9718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(inForkJoinPool()); 9728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 9748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * inForkJoinPool of non-FJ task returns false 9788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInForkJoinPool2() { 9808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 9818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 9828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(inForkJoinPool()); 9838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.invoke()); 9858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setRawResult(null) succeeds 9898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetRawResult() { 9918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 9928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 9938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle setRawResult(null); 9948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(getRawResult()); 9958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 9968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a.invoke()); 9978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception after invoking completeExceptionally 10018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompleteExceptionally2() { 10038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 10048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 10058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF n = new LCCF(8); 10068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(n, 8); 10078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FJException ex = new FJException(); 10088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.completeExceptionally(ex); 10098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.checkCompletedExceptionally(ex); 10108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle n.checkCompletedExceptionally(ex); 10118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 10138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(t1, t2) invokes all task arguments 10178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll2() { 10198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 10208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 10218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 10228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 10238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g); 10248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 10258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 10268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 10278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 10288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 10308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with 1 argument invokes task 10348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll1() { 10368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 10378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 10388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 10398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f); 10408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 10418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 10428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 10448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with > 2 argument invokes tasks 10488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll3() { 10508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 10518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 10528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 10538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 10548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 10558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 10568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 10578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 10588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(13, h.number); 10598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 10608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 10618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h); 10628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 10648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(collection) invokes all tasks in the collection 10688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAllCollection() { 10708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 10718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 10728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 10738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 10748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 10758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle HashSet set = new HashSet(); 10768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(f); 10778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(g); 10788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(h); 10798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(set); 10808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 10818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 10828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(13, h.number); 10838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 10848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 10858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h); 10868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 10888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with any null task throws NPE 10928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAllNPE() { 10948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 10958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 10968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 10978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 10988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = null; 10998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 11018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 11038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 11048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 11058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(t1, t2) throw exception if any task does 11098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll2() { 11118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 11128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 11138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 11148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF g = new LFCCF(9); 11158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g); 11178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 11198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 11208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 11228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 11238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with 1 argument throws exception if task does 11278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll1() { 11298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 11308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 11318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF g = new LFCCF(9); 11328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(g); 11348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 11368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 11378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 11398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 11408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with > 2 argument throws exception if any task does 11448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll3() { 11468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 11478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 11488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 11498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF g = new LFCCF(9); 11508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 11518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 11538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 11558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 11568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 11588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 11598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11628e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * invokeAll(collection) throws exception if any task does 11638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAllCollection() { 11658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 11668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 11678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 11688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 11698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 11708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle HashSet set = new HashSet(); 11718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(f); 11728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(g); 11738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(h); 11748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(set); 11768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 11788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 11798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 11818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(mainPool(), a); 11828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * tryUnfork returns true for most recent unexecuted task, 11868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * and suppresses execution 11878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTryUnfork() { 11898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 11908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 11918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 11928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 11938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 11948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 11958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.tryUnfork()); 11968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 11978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 11988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 11998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 12008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 12018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getSurplusQueuedTaskCount returns > 0 when 12058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * there are more tasks than threads 12068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetSurplusQueuedTaskCount() { 12088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 12098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 12108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 12118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(h, h.fork()); 12128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 12138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 12148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 12158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 12168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(getSurplusQueuedTaskCount() > 0); 12178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 12188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, getSurplusQueuedTaskCount()); 12198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 12208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 12218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h); 12228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 12238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 12248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * peekNextLocalTask returns most recent unexecuted task. 12288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPeekNextLocalTask() { 12308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 12318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 12328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 12338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 12348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 12358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 12368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, peekNextLocalTask()); 12378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.join()); 12388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 12398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 12408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 12418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 12428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 12438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollNextLocalTask returns most recent unexecuted task without 12478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * executing it 12488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollNextLocalTask() { 12508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 12518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 12528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 12538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 12548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 12558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 12568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, pollNextLocalTask()); 12578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 12588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 12598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 12608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 12618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 12628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 12638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollTask returns an unexecuted task without executing it 12678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollTask() { 12698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 12708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 12718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 12728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 12738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 12748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 12758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, pollTask()); 12768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 12778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(f); 12788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 12798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 12808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 12818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * peekNextLocalTask returns least recent unexecuted task in async mode 12858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPeekNextLocalTaskAsync() { 12878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 12888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 12898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 12908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 12918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 12928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 12938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, peekNextLocalTask()); 12948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.join()); 12958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 12968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 12978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 12988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 12998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 13008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(asyncSingletonPool(), a); 13018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollNextLocalTask returns least recent unexecuted task without 13058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * executing it, in async mode 13068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollNextLocalTaskAsync() { 13088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 13098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 13108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 13118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 13128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 13138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 13148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, pollNextLocalTask()); 13158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 13168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 13178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 13188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(g); 13198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 13208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(asyncSingletonPool(), a); 13218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * pollTask returns an unexecuted task without executing it, in 13258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * async mode 13268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollTaskAsync() { 13288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 13298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 13308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 13318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, g.fork()); 13328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 13338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 13348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(g, pollTask()); 13358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 13368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 13378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 13388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkNotDone(g); 13398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 13408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(asyncSingletonPool(), a); 13418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // versions for singleton pools 13448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke returns when task completes normally. 13478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isCompletedAbnormally and isCancelled return false for normally 13488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed tasks; getRawResult returns null. 13498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeSingleton() { 13518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 13528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 13538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 13548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.invoke()); 13558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 13568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 13578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 13588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 13598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyInvoke task returns when task completes normally. 13638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isCompletedAbnormally and isCancelled return false for normally 13648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed tasks 13658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testQuietlyInvokeSingleton() { 13678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 13688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 13698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 13708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyInvoke(); 13718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 13728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 13738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 13748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 13758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task returns when task completes 13798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkJoinSingleton() { 13818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 13828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 13838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 13848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 13858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.join()); 13868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 13878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 13888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 13898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 13908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task returns when task completes 13948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkGetSingleton() { 13968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 13978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 13988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 13998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 14008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.get()); 14018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 14028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 14038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 14048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 14058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task returns when task completes 14098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkTimedGetSingleton() { 14118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 14128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 14138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 14148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 14158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.get(LONG_DELAY_MS, MILLISECONDS)); 14168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 14178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 14188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 14198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 14208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get with null time unit throws NPE 14248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkTimedGetNPESingleton() { 14268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 14278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 14288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 14298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 14308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 14318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(5L, null); 14328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 14338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 14348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 14358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 14368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task completes 14408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkQuietlyJoinSingleton() { 14428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 14438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 14448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 14458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 14468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 14478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 14488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 14498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 14508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 14518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * helpQuiesce returns when tasks are complete. 14558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getQueuedTaskCount returns 0 when quiescent 14568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testForkHelpQuiesceSingleton() { 14588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 14598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 14608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 14618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 14628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle helpQuiesce(); 14638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, getQueuedTaskCount()); 14648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 14658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 14668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 14678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 14688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception when task completes abnormally 14728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeSingleton() { 14748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 14758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 14768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 14778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 14788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.invoke(); 14798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 14808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 14818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 14828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 14848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 14858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyInvoke task returns when task completes abnormally 14898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalQuietlyInvokeSingleton() { 14918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 14928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 14938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 14948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyInvoke(); 14958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.getException() instanceof FJException); 14968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, f.getException()); 14978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 14988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 14998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task throws exception when task completes abnormally 15038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkJoinSingleton() { 15058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 15068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 15078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 15088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 15098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.join(); 15118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 15128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 15138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 15148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 15168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 15178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task throws exception when task completes abnormally 15218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkGetSingleton() { 15238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 15248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 15258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 15268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 15278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(); 15298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 15308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 15318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Throwable cause = success.getCause(); 15328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(cause instanceof FJException); 15338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, cause); 15348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 15368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 15378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task throws exception when task completes abnormally 15418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkTimedGetSingleton() { 15438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 15448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 15458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 15468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 15478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(LONG_DELAY_MS, MILLISECONDS); 15498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 15508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 15518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Throwable cause = success.getCause(); 15528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(cause instanceof FJException); 15538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, cause); 15548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 15568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 15578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task completes abnormally 15618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalForkQuietlyJoinSingleton() { 15638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 15648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 15658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 15668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 15678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 15688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.getException() instanceof FJException); 15698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, f.getException()); 15708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 15718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 15728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception when task cancelled 15768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledInvokeSingleton() { 15788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 15798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 15808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 15818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 15828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.invoke(); 15848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 15858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 15868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 15878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 15898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 15908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * join of a forked task throws exception when task cancelled 15948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkJoinSingleton() { 15968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 15978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 15988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 15998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 16008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 16018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.join(); 16038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 16048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 16058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 16068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 16088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 16098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of a forked task throws exception when task cancelled 16138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkGetSingleton() { 16158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 16168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 16178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 16188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 16198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 16208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(); 16228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 16238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 16248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 16258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 16278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 16288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed get of a forked task throws exception when task cancelled 16328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkTimedGetSingleton() throws Exception { 16348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 16358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() throws Exception { 16368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 16378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 16388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 16398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.get(LONG_DELAY_MS, MILLISECONDS); 16418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 16428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (CancellationException success) { 16438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 16448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 16468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 16478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * quietlyJoin of a forked task returns when task cancelled 16518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCancelledForkQuietlyJoinSingleton() { 16538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 16548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 16558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 16568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(f.cancel(true)); 16578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(f, f.fork()); 16588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.quietlyJoin(); 16598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCancelled(f); 16608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 16618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 16628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invoke task throws exception after invoking completeExceptionally 16668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompleteExceptionallySingleton() { 16688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 16698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 16708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF n = new LCCF(8); 16718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(n, 8); 16728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FJException ex = new FJException(); 16738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.completeExceptionally(ex); 16748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.checkCompletedExceptionally(ex); 16758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle n.checkCompletedExceptionally(ex); 16768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 16778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 16788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(t1, t2) invokes all task arguments 16828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll2Singleton() { 16848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 16858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 16868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 16878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 16888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g); 16898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 16908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 16918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 16928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 16938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 16948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 16958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with 1 argument invokes task 16998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll1Singleton() { 17018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 17028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 17038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 17048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f); 17058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 17068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 17078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 17088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 17098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with > 2 argument invokes tasks 17138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll3Singleton() { 17158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 17168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 17178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 17188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 17198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 17208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 17218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 17228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 17238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(13, h.number); 17248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 17258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 17268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h); 17278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 17288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 17298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(collection) invokes all tasks in the collection 17338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAllCollectionSingleton() { 17358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 17368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 17378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 17388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 17398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 17408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle HashSet set = new HashSet(); 17418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(f); 17428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(g); 17438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(h); 17448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(set); 17458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(21, f.number); 17468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(34, g.number); 17478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(13, h.number); 17488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(f); 17498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(g); 17508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedNormally(h); 17518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 17528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 17538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with any null task throws NPE 17578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAllNPESingleton() { 17598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 17608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 17618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 17628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 17638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = null; 17648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 17668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 17678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 17688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 17698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 17708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(t1, t2) throw exception if any task does 17748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll2Singleton() { 17768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 17778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 17788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 17798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF g = new LFCCF(9); 17808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g); 17828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 17838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 17848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 17858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 17878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 17888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with 1 argument throws exception if task does 17928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll1Singleton() { 17948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 17958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 17968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF g = new LFCCF(9); 17978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(g); 17998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 18008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 18018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 18028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 18048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 18058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 18078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 18088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(tasks) with > 2 argument throws exception if any task does 18098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 18108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAll3Singleton() { 18118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 18128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 18138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF f = new LCCF(8); 18148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF g = new LFCCF(9); 18158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 18168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 18178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(f, g, h); 18188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 18198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 18208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(g, success); 18218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 18238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 18248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 18268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 18278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * invokeAll(collection) throws exception if any task does 18288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 18298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAbnormalInvokeAllCollectionSingleton() { 18308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ForkJoinTask a = new CheckedRecursiveAction() { 18318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void realCompute() { 18328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FailingCCF f = new LFCCF(8); 18338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF g = new LCCF(9); 18348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CCF h = new LCCF(7); 18358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle HashSet set = new HashSet(); 18368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(f); 18378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(g); 18388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle set.add(h); 18398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 18408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle invokeAll(set); 18418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 18428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (FJException success) { 18438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkCompletedAbnormally(f, success); 18448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 18468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle testInvokeOnPool(singletonPool(), a); 18478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 18498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 1850