ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ForkJoinTaskTest.java
(Generate patch)

Comparing jsr166/src/test/tck/ForkJoinTaskTest.java (file contents):
Revision 1.20 by dl, Sun Oct 24 13:41:17 2010 UTC vs.
Revision 1.35 by dl, Sun Jul 21 22:24:18 2013 UTC

# Line 1 | Line 1
1   /*
2   * Written by Doug Lea with assistance from members of JCP JSR-166
3   * Expert Group and released to the public domain, as explained at
4 < * http://creativecommons.org/licenses/publicdomain
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6   import java.util.concurrent.ExecutionException;
7   import java.util.concurrent.CancellationException;
# Line 10 | Line 10 | import java.util.concurrent.ForkJoinTask
10   import java.util.concurrent.ForkJoinWorkerThread;
11   import java.util.concurrent.RecursiveAction;
12   import java.util.concurrent.TimeUnit;
13 + import java.util.concurrent.TimeoutException;
14   import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
15   import static java.util.concurrent.TimeUnit.MILLISECONDS;
16 + import static java.util.concurrent.TimeUnit.SECONDS;
17   import java.util.HashSet;
18   import junit.framework.*;
19  
# Line 26 | Line 28 | public class ForkJoinTaskTest extends JS
28      }
29  
30      // Runs with "mainPool" use > 1 thread. singletonPool tests use 1
31 <    static final int mainPoolSize =
31 >    static final int mainPoolSize =
32          Math.max(2, Runtime.getRuntime().availableProcessors());
33  
34      private static ForkJoinPool mainPool() {
# Line 50 | Line 52 | public class ForkJoinTaskTest extends JS
52              assertFalse(a.isCompletedAbnormally());
53              assertFalse(a.isCancelled());
54              assertNull(a.getException());
55 +            assertNull(a.getRawResult());
56  
57              assertNull(pool.invoke(a));
58  
# Line 58 | Line 61 | public class ForkJoinTaskTest extends JS
61              assertFalse(a.isCompletedAbnormally());
62              assertFalse(a.isCancelled());
63              assertNull(a.getException());
64 +            assertNull(a.getRawResult());
65          } finally {
66              joinPool(pool);
67          }
68      }
69  
70 +    void checkNotDone(ForkJoinTask a) {
71 +        assertFalse(a.isDone());
72 +        assertFalse(a.isCompletedNormally());
73 +        assertFalse(a.isCompletedAbnormally());
74 +        assertFalse(a.isCancelled());
75 +        assertNull(a.getException());
76 +        assertNull(a.getRawResult());
77 +
78 +        try {
79 +            a.get(0L, SECONDS);
80 +            shouldThrow();
81 +        } catch (TimeoutException success) {
82 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
83 +    }
84 +
85 +    <T> void checkCompletedNormally(ForkJoinTask<T> a) {
86 +        checkCompletedNormally(a, null);
87 +    }
88 +
89 +    <T> void checkCompletedNormally(ForkJoinTask<T> a, T expected) {
90 +        assertTrue(a.isDone());
91 +        assertFalse(a.isCancelled());
92 +        assertTrue(a.isCompletedNormally());
93 +        assertFalse(a.isCompletedAbnormally());
94 +        assertNull(a.getException());
95 +        assertSame(expected, a.getRawResult());
96 +
97 +        {
98 +            Thread.currentThread().interrupt();
99 +            long t0 = System.nanoTime();
100 +            assertSame(expected, a.join());
101 +            assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS);
102 +            Thread.interrupted();
103 +        }
104 +
105 +        {
106 +            Thread.currentThread().interrupt();
107 +            long t0 = System.nanoTime();
108 +            a.quietlyJoin();        // should be no-op
109 +            assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS);
110 +            Thread.interrupted();
111 +        }
112 +
113 +        assertFalse(a.cancel(false));
114 +        assertFalse(a.cancel(true));
115 +        try {
116 +            assertSame(expected, a.get());
117 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
118 +        try {
119 +            assertSame(expected, a.get(5L, SECONDS));
120 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
121 +    }
122 +
123 +    void checkCancelled(ForkJoinTask a) {
124 +        assertTrue(a.isDone());
125 +        assertTrue(a.isCancelled());
126 +        assertFalse(a.isCompletedNormally());
127 +        assertTrue(a.isCompletedAbnormally());
128 +        assertTrue(a.getException() instanceof CancellationException);
129 +        assertNull(a.getRawResult());
130 +        assertTrue(a.cancel(false));
131 +        assertTrue(a.cancel(true));
132 +
133 +        try {
134 +            Thread.currentThread().interrupt();
135 +            a.join();
136 +            shouldThrow();
137 +        } catch (CancellationException success) {
138 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
139 +        Thread.interrupted();
140 +
141 +        {
142 +            long t0 = System.nanoTime();
143 +            a.quietlyJoin();        // should be no-op
144 +            assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS);
145 +        }
146 +
147 +        try {
148 +            a.get();
149 +            shouldThrow();
150 +        } catch (CancellationException success) {
151 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
152 +
153 +        try {
154 +            a.get(5L, SECONDS);
155 +            shouldThrow();
156 +        } catch (CancellationException success) {
157 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
158 +    }
159 +
160 +    void checkCompletedAbnormally(ForkJoinTask a, Throwable t) {
161 +        assertTrue(a.isDone());
162 +        assertFalse(a.isCancelled());
163 +        assertFalse(a.isCompletedNormally());
164 +        assertTrue(a.isCompletedAbnormally());
165 +        assertSame(t.getClass(), a.getException().getClass());
166 +        assertNull(a.getRawResult());
167 +        assertFalse(a.cancel(false));
168 +        assertFalse(a.cancel(true));
169 +
170 +        try {
171 +            Thread.currentThread().interrupt();
172 +            a.join();
173 +            shouldThrow();
174 +        } catch (Throwable expected) {
175 +            assertSame(t.getClass(), expected.getClass());
176 +        }
177 +        Thread.interrupted();
178 +
179 +        {
180 +            long t0 = System.nanoTime();
181 +            a.quietlyJoin();        // should be no-op
182 +            assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS);
183 +        }
184 +
185 +        try {
186 +            a.get();
187 +            shouldThrow();
188 +        } catch (ExecutionException success) {
189 +            assertSame(t.getClass(), success.getCause().getClass());
190 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
191 +
192 +        try {
193 +            a.get(5L, SECONDS);
194 +            shouldThrow();
195 +        } catch (ExecutionException success) {
196 +            assertSame(t.getClass(), success.getCause().getClass());
197 +        } catch (Throwable fail) { threadUnexpectedException(fail); }
198 +    }
199 +
200      /*
201       * Testing coverage notes:
202       *
# Line 71 | Line 205 | public class ForkJoinTaskTest extends JS
205       * differently than supplied Recursive forms.
206       */
207  
208 <    static final class FJException extends RuntimeException {
208 >    public static final class FJException extends RuntimeException {
209          FJException() { super(); }
210      }
211  
# Line 215 | Line 349 | public class ForkJoinTaskTest extends JS
349          }
350      }
351  
218
352      static final class FailingAsyncFib extends BinaryAsyncAction {
353          int number;
354          public FailingAsyncFib(int n) {
# Line 247 | Line 380 | public class ForkJoinTaskTest extends JS
380      /**
381       * invoke returns when task completes normally.
382       * isCompletedAbnormally and isCancelled return false for normally
383 <     * completed tasks. getRawResult of a RecursiveAction returns null;
383 >     * completed tasks; getRawResult returns null.
384       */
385      public void testInvoke() {
386          RecursiveAction a = new CheckedRecursiveAction() {
387 <            public void realCompute() {
387 >            protected void realCompute() {
388                  AsyncFib f = new AsyncFib(8);
389                  assertNull(f.invoke());
390                  assertEquals(21, f.number);
391 <                assertTrue(f.isDone());
259 <                assertFalse(f.isCancelled());
260 <                assertFalse(f.isCompletedAbnormally());
261 <                assertNull(f.getRawResult());
391 >                checkCompletedNormally(f);
392              }};
393          testInvokeOnPool(mainPool(), a);
394      }
# Line 270 | Line 400 | public class ForkJoinTaskTest extends JS
400       */
401      public void testQuietlyInvoke() {
402          RecursiveAction a = new CheckedRecursiveAction() {
403 <            public void realCompute() {
403 >            protected void realCompute() {
404                  AsyncFib f = new AsyncFib(8);
405                  f.quietlyInvoke();
406                  assertEquals(21, f.number);
407 <                assertTrue(f.isDone());
278 <                assertFalse(f.isCancelled());
279 <                assertFalse(f.isCompletedAbnormally());
280 <                assertNull(f.getRawResult());
407 >                checkCompletedNormally(f);
408              }};
409          testInvokeOnPool(mainPool(), a);
410      }
# Line 287 | Line 414 | public class ForkJoinTaskTest extends JS
414       */
415      public void testForkJoin() {
416          RecursiveAction a = new CheckedRecursiveAction() {
417 <            public void realCompute() {
417 >            protected void realCompute() {
418                  AsyncFib f = new AsyncFib(8);
419                  assertSame(f, f.fork());
420                  assertNull(f.join());
421                  assertEquals(21, f.number);
422 <                assertTrue(f.isDone());
296 <                assertNull(f.getRawResult());
422 >                checkCompletedNormally(f);
423              }};
424          testInvokeOnPool(mainPool(), a);
425      }
# Line 303 | Line 429 | public class ForkJoinTaskTest extends JS
429       */
430      public void testForkGet() {
431          RecursiveAction a = new CheckedRecursiveAction() {
432 <            public void realCompute() throws Exception {
432 >            protected void realCompute() throws Exception {
433                  AsyncFib f = new AsyncFib(8);
434                  assertSame(f, f.fork());
435                  assertNull(f.get());
436                  assertEquals(21, f.number);
437 <                assertTrue(f.isDone());
437 >                checkCompletedNormally(f);
438              }};
439          testInvokeOnPool(mainPool(), a);
440      }
# Line 318 | Line 444 | public class ForkJoinTaskTest extends JS
444       */
445      public void testForkTimedGet() {
446          RecursiveAction a = new CheckedRecursiveAction() {
447 <            public void realCompute() throws Exception {
447 >            protected void realCompute() throws Exception {
448                  AsyncFib f = new AsyncFib(8);
449                  assertSame(f, f.fork());
450                  assertNull(f.get(LONG_DELAY_MS, MILLISECONDS));
451                  assertEquals(21, f.number);
452 <                assertTrue(f.isDone());
452 >                checkCompletedNormally(f);
453              }};
454          testInvokeOnPool(mainPool(), a);
455      }
# Line 333 | Line 459 | public class ForkJoinTaskTest extends JS
459       */
460      public void testForkTimedGetNPE() {
461          RecursiveAction a = new CheckedRecursiveAction() {
462 <            public void realCompute() throws Exception {
462 >            protected void realCompute() throws Exception {
463                  AsyncFib f = new AsyncFib(8);
464                  assertSame(f, f.fork());
465                  try {
# Line 349 | Line 475 | public class ForkJoinTaskTest extends JS
475       */
476      public void testForkQuietlyJoin() {
477          RecursiveAction a = new CheckedRecursiveAction() {
478 <            public void realCompute() {
478 >            protected void realCompute() {
479                  AsyncFib f = new AsyncFib(8);
480                  assertSame(f, f.fork());
481                  f.quietlyJoin();
482                  assertEquals(21, f.number);
483 <                assertTrue(f.isDone());
483 >                checkCompletedNormally(f);
484              }};
485          testInvokeOnPool(mainPool(), a);
486      }
487  
362
488      /**
489       * helpQuiesce returns when tasks are complete.
490       * getQueuedTaskCount returns 0 when quiescent
491       */
492      public void testForkHelpQuiesce() {
493          RecursiveAction a = new CheckedRecursiveAction() {
494 <            public void realCompute() {
494 >            protected void realCompute() {
495                  AsyncFib f = new AsyncFib(8);
496                  assertSame(f, f.fork());
497 <                f.helpQuiesce();
497 >                helpQuiesce();
498                  assertEquals(21, f.number);
374                assertTrue(f.isDone());
499                  assertEquals(0, getQueuedTaskCount());
500 +                checkCompletedNormally(f);
501              }};
502          testInvokeOnPool(mainPool(), a);
503      }
504  
380
505      /**
506       * invoke task throws exception when task completes abnormally
507       */
508      public void testAbnormalInvoke() {
509          RecursiveAction a = new CheckedRecursiveAction() {
510 <            public void realCompute() {
510 >            protected void realCompute() {
511                  FailingAsyncFib f = new FailingAsyncFib(8);
512                  try {
513                      f.invoke();
514                      shouldThrow();
515 <                } catch (FJException success) {}
515 >                } catch (FJException success) {
516 >                    checkCompletedAbnormally(f, success);
517 >                }
518              }};
519          testInvokeOnPool(mainPool(), a);
520      }
# Line 398 | Line 524 | public class ForkJoinTaskTest extends JS
524       */
525      public void testAbnormalQuietlyInvoke() {
526          RecursiveAction a = new CheckedRecursiveAction() {
527 <            public void realCompute() {
527 >            protected void realCompute() {
528                  FailingAsyncFib f = new FailingAsyncFib(8);
529                  f.quietlyInvoke();
530 <                assertTrue(f.isDone());
530 >                assertTrue(f.getException() instanceof FJException);
531 >                checkCompletedAbnormally(f, f.getException());
532              }};
533          testInvokeOnPool(mainPool(), a);
534      }
# Line 411 | Line 538 | public class ForkJoinTaskTest extends JS
538       */
539      public void testAbnormalForkJoin() {
540          RecursiveAction a = new CheckedRecursiveAction() {
541 <            public void realCompute() {
541 >            protected void realCompute() {
542                  FailingAsyncFib f = new FailingAsyncFib(8);
543                  assertSame(f, f.fork());
544                  try {
545                      f.join();
546                      shouldThrow();
547 <                } catch (FJException success) {}
547 >                } catch (FJException success) {
548 >                    checkCompletedAbnormally(f, success);
549 >                }
550              }};
551          testInvokeOnPool(mainPool(), a);
552      }
# Line 427 | Line 556 | public class ForkJoinTaskTest extends JS
556       */
557      public void testAbnormalForkGet() {
558          RecursiveAction a = new CheckedRecursiveAction() {
559 <            public void realCompute() throws Exception {
559 >            protected void realCompute() throws Exception {
560                  FailingAsyncFib f = new FailingAsyncFib(8);
561                  assertSame(f, f.fork());
562                  try {
# Line 436 | Line 565 | public class ForkJoinTaskTest extends JS
565                  } catch (ExecutionException success) {
566                      Throwable cause = success.getCause();
567                      assertTrue(cause instanceof FJException);
568 <                    assertTrue(f.isDone());
440 <                    assertTrue(f.isCompletedAbnormally());
441 <                    assertSame(cause, f.getException());
568 >                    checkCompletedAbnormally(f, cause);
569                  }
570              }};
571          testInvokeOnPool(mainPool(), a);
# Line 449 | Line 576 | public class ForkJoinTaskTest extends JS
576       */
577      public void testAbnormalForkTimedGet() {
578          RecursiveAction a = new CheckedRecursiveAction() {
579 <            public void realCompute() throws Exception {
579 >            protected void realCompute() throws Exception {
580                  FailingAsyncFib f = new FailingAsyncFib(8);
581                  assertSame(f, f.fork());
582                  try {
# Line 458 | Line 585 | public class ForkJoinTaskTest extends JS
585                  } catch (ExecutionException success) {
586                      Throwable cause = success.getCause();
587                      assertTrue(cause instanceof FJException);
588 <                    assertTrue(f.isDone());
462 <                    assertTrue(f.isCompletedAbnormally());
463 <                    assertSame(cause, f.getException());
588 >                    checkCompletedAbnormally(f, cause);
589                  }
590              }};
591          testInvokeOnPool(mainPool(), a);
# Line 471 | Line 596 | public class ForkJoinTaskTest extends JS
596       */
597      public void testAbnormalForkQuietlyJoin() {
598          RecursiveAction a = new CheckedRecursiveAction() {
599 <            public void realCompute() {
599 >            protected void realCompute() {
600                  FailingAsyncFib f = new FailingAsyncFib(8);
601                  assertSame(f, f.fork());
602                  f.quietlyJoin();
478                assertTrue(f.isDone());
479                assertTrue(f.isCompletedAbnormally());
603                  assertTrue(f.getException() instanceof FJException);
604 +                checkCompletedAbnormally(f, f.getException());
605              }};
606          testInvokeOnPool(mainPool(), a);
607      }
# Line 487 | Line 611 | public class ForkJoinTaskTest extends JS
611       */
612      public void testCancelledInvoke() {
613          RecursiveAction a = new CheckedRecursiveAction() {
614 <            public void realCompute() {
614 >            protected void realCompute() {
615                  AsyncFib f = new AsyncFib(8);
616                  assertTrue(f.cancel(true));
617                  try {
618                      f.invoke();
619                      shouldThrow();
620                  } catch (CancellationException success) {
621 <                    assertTrue(f.isDone());
498 <                    assertTrue(f.isCancelled());
499 <                    assertTrue(f.isCompletedAbnormally());
500 <                    assertTrue(f.getException() instanceof CancellationException);
621 >                    checkCancelled(f);
622                  }
623              }};
624          testInvokeOnPool(mainPool(), a);
# Line 508 | Line 629 | public class ForkJoinTaskTest extends JS
629       */
630      public void testCancelledForkJoin() {
631          RecursiveAction a = new CheckedRecursiveAction() {
632 <            public void realCompute() {
632 >            protected void realCompute() {
633                  AsyncFib f = new AsyncFib(8);
634                  assertTrue(f.cancel(true));
635                  assertSame(f, f.fork());
# Line 516 | Line 637 | public class ForkJoinTaskTest extends JS
637                      f.join();
638                      shouldThrow();
639                  } catch (CancellationException success) {
640 <                    assertTrue(f.isDone());
520 <                    assertTrue(f.isCancelled());
521 <                    assertTrue(f.isCompletedAbnormally());
522 <                    assertTrue(f.getException() instanceof CancellationException);
640 >                    checkCancelled(f);
641                  }
642              }};
643          testInvokeOnPool(mainPool(), a);
# Line 530 | Line 648 | public class ForkJoinTaskTest extends JS
648       */
649      public void testCancelledForkGet() {
650          RecursiveAction a = new CheckedRecursiveAction() {
651 <            public void realCompute() throws Exception {
651 >            protected void realCompute() throws Exception {
652                  AsyncFib f = new AsyncFib(8);
653                  assertTrue(f.cancel(true));
654                  assertSame(f, f.fork());
# Line 538 | Line 656 | public class ForkJoinTaskTest extends JS
656                      f.get();
657                      shouldThrow();
658                  } catch (CancellationException success) {
659 <                    assertTrue(f.isDone());
542 <                    assertTrue(f.isCancelled());
543 <                    assertTrue(f.isCompletedAbnormally());
544 <                    assertTrue(f.getException() instanceof CancellationException);
659 >                    checkCancelled(f);
660                  }
661              }};
662          testInvokeOnPool(mainPool(), a);
# Line 552 | Line 667 | public class ForkJoinTaskTest extends JS
667       */
668      public void testCancelledForkTimedGet() throws Exception {
669          RecursiveAction a = new CheckedRecursiveAction() {
670 <            public void realCompute() throws Exception {
670 >            protected void realCompute() throws Exception {
671                  AsyncFib f = new AsyncFib(8);
672                  assertTrue(f.cancel(true));
673                  assertSame(f, f.fork());
# Line 560 | Line 675 | public class ForkJoinTaskTest extends JS
675                      f.get(LONG_DELAY_MS, MILLISECONDS);
676                      shouldThrow();
677                  } catch (CancellationException success) {
678 <                    assertTrue(f.isDone());
564 <                    assertTrue(f.isCancelled());
565 <                    assertTrue(f.isCompletedAbnormally());
566 <                    assertTrue(f.getException() instanceof CancellationException);
678 >                    checkCancelled(f);
679                  }
680              }};
681          testInvokeOnPool(mainPool(), a);
# Line 574 | Line 686 | public class ForkJoinTaskTest extends JS
686       */
687      public void testCancelledForkQuietlyJoin() {
688          RecursiveAction a = new CheckedRecursiveAction() {
689 <            public void realCompute() {
689 >            protected void realCompute() {
690                  AsyncFib f = new AsyncFib(8);
691                  assertTrue(f.cancel(true));
692                  assertSame(f, f.fork());
693                  f.quietlyJoin();
694 <                assertTrue(f.isDone());
583 <                assertTrue(f.isCompletedAbnormally());
584 <                assertTrue(f.isCancelled());
585 <                assertTrue(f.getException() instanceof CancellationException);
694 >                checkCancelled(f);
695              }};
696          testInvokeOnPool(mainPool(), a);
697      }
# Line 593 | Line 702 | public class ForkJoinTaskTest extends JS
702      public void testGetPool() {
703          final ForkJoinPool mainPool = mainPool();
704          RecursiveAction a = new CheckedRecursiveAction() {
705 <            public void realCompute() {
705 >            protected void realCompute() {
706                  assertSame(mainPool, getPool());
707              }};
708          testInvokeOnPool(mainPool, a);
# Line 604 | Line 713 | public class ForkJoinTaskTest extends JS
713       */
714      public void testGetPool2() {
715          RecursiveAction a = new CheckedRecursiveAction() {
716 <            public void realCompute() {
716 >            protected void realCompute() {
717                  assertNull(getPool());
718              }};
719          assertNull(a.invoke());
# Line 615 | Line 724 | public class ForkJoinTaskTest extends JS
724       */
725      public void testInForkJoinPool() {
726          RecursiveAction a = new CheckedRecursiveAction() {
727 <            public void realCompute() {
727 >            protected void realCompute() {
728                  assertTrue(inForkJoinPool());
729              }};
730          testInvokeOnPool(mainPool(), a);
# Line 626 | Line 735 | public class ForkJoinTaskTest extends JS
735       */
736      public void testInForkJoinPool2() {
737          RecursiveAction a = new CheckedRecursiveAction() {
738 <            public void realCompute() {
739 <                assertTrue(!inForkJoinPool());
738 >            protected void realCompute() {
739 >                assertFalse(inForkJoinPool());
740              }};
741          assertNull(a.invoke());
742      }
# Line 637 | Line 746 | public class ForkJoinTaskTest extends JS
746       */
747      public void testSetRawResult() {
748          RecursiveAction a = new CheckedRecursiveAction() {
749 <            public void realCompute() {
749 >            protected void realCompute() {
750                  setRawResult(null);
751 +                assertNull(getRawResult());
752              }};
753          assertNull(a.invoke());
754      }
# Line 648 | Line 758 | public class ForkJoinTaskTest extends JS
758       */
759      public void testCompleteExceptionally() {
760          RecursiveAction a = new CheckedRecursiveAction() {
761 <            public void realCompute() {
761 >            protected void realCompute() {
762                  AsyncFib f = new AsyncFib(8);
763                  f.completeExceptionally(new FJException());
764                  try {
765                      f.invoke();
766                      shouldThrow();
767 <                } catch (FJException success) {}
767 >                } catch (FJException success) {
768 >                    checkCompletedAbnormally(f, success);
769 >                }
770              }};
771          testInvokeOnPool(mainPool(), a);
772      }
# Line 664 | Line 776 | public class ForkJoinTaskTest extends JS
776       */
777      public void testInvokeAll2() {
778          RecursiveAction a = new CheckedRecursiveAction() {
779 <            public void realCompute() {
779 >            protected void realCompute() {
780                  AsyncFib f = new AsyncFib(8);
781                  AsyncFib g = new AsyncFib(9);
782                  invokeAll(f, g);
671                assertTrue(f.isDone());
783                  assertEquals(21, f.number);
673                assertTrue(g.isDone());
784                  assertEquals(34, g.number);
785 +                checkCompletedNormally(f);
786 +                checkCompletedNormally(g);
787              }};
788          testInvokeOnPool(mainPool(), a);
789      }
# Line 681 | Line 793 | public class ForkJoinTaskTest extends JS
793       */
794      public void testInvokeAll1() {
795          RecursiveAction a = new CheckedRecursiveAction() {
796 <            public void realCompute() {
796 >            protected void realCompute() {
797                  AsyncFib f = new AsyncFib(8);
798                  invokeAll(f);
799 <                assertTrue(f.isDone());
799 >                checkCompletedNormally(f);
800                  assertEquals(21, f.number);
801              }};
802          testInvokeOnPool(mainPool(), a);
# Line 695 | Line 807 | public class ForkJoinTaskTest extends JS
807       */
808      public void testInvokeAll3() {
809          RecursiveAction a = new CheckedRecursiveAction() {
810 <            public void realCompute() {
810 >            protected void realCompute() {
811                  AsyncFib f = new AsyncFib(8);
812                  AsyncFib g = new AsyncFib(9);
813                  AsyncFib h = new AsyncFib(7);
814                  invokeAll(f, g, h);
703                assertTrue(f.isDone());
815                  assertEquals(21, f.number);
705                assertTrue(g.isDone());
816                  assertEquals(34, g.number);
707                assertTrue(h.isDone());
817                  assertEquals(13, h.number);
818 +                checkCompletedNormally(f);
819 +                checkCompletedNormally(g);
820 +                checkCompletedNormally(h);
821              }};
822          testInvokeOnPool(mainPool(), a);
823      }
# Line 715 | Line 827 | public class ForkJoinTaskTest extends JS
827       */
828      public void testInvokeAllCollection() {
829          RecursiveAction a = new CheckedRecursiveAction() {
830 <            public void realCompute() {
830 >            protected void realCompute() {
831                  AsyncFib f = new AsyncFib(8);
832                  AsyncFib g = new AsyncFib(9);
833                  AsyncFib h = new AsyncFib(7);
# Line 724 | Line 836 | public class ForkJoinTaskTest extends JS
836                  set.add(g);
837                  set.add(h);
838                  invokeAll(set);
727                assertTrue(f.isDone());
839                  assertEquals(21, f.number);
729                assertTrue(g.isDone());
840                  assertEquals(34, g.number);
731                assertTrue(h.isDone());
841                  assertEquals(13, h.number);
842 +                checkCompletedNormally(f);
843 +                checkCompletedNormally(g);
844 +                checkCompletedNormally(h);
845              }};
846          testInvokeOnPool(mainPool(), a);
847      }
848  
737
849      /**
850       * invokeAll(tasks) with any null task throws NPE
851       */
852      public void testInvokeAllNPE() {
853          RecursiveAction a = new CheckedRecursiveAction() {
854 <            public void realCompute() {
854 >            protected void realCompute() {
855                  AsyncFib f = new AsyncFib(8);
856                  AsyncFib g = new AsyncFib(9);
857                  AsyncFib h = null;
# Line 757 | Line 868 | public class ForkJoinTaskTest extends JS
868       */
869      public void testAbnormalInvokeAll2() {
870          RecursiveAction a = new CheckedRecursiveAction() {
871 <            public void realCompute() {
871 >            protected void realCompute() {
872                  AsyncFib f = new AsyncFib(8);
873                  FailingAsyncFib g = new FailingAsyncFib(9);
874                  try {
875                      invokeAll(f, g);
876                      shouldThrow();
877 <                } catch (FJException success) {}
877 >                } catch (FJException success) {
878 >                    checkCompletedAbnormally(g, success);
879 >                }
880              }};
881          testInvokeOnPool(mainPool(), a);
882      }
# Line 773 | Line 886 | public class ForkJoinTaskTest extends JS
886       */
887      public void testAbnormalInvokeAll1() {
888          RecursiveAction a = new CheckedRecursiveAction() {
889 <            public void realCompute() {
889 >            protected void realCompute() {
890                  FailingAsyncFib g = new FailingAsyncFib(9);
891                  try {
892                      invokeAll(g);
893                      shouldThrow();
894 <                } catch (FJException success) {}
894 >                } catch (FJException success) {
895 >                    checkCompletedAbnormally(g, success);
896 >                }
897              }};
898          testInvokeOnPool(mainPool(), a);
899      }
# Line 788 | Line 903 | public class ForkJoinTaskTest extends JS
903       */
904      public void testAbnormalInvokeAll3() {
905          RecursiveAction a = new CheckedRecursiveAction() {
906 <            public void realCompute() {
906 >            protected void realCompute() {
907                  AsyncFib f = new AsyncFib(8);
908                  FailingAsyncFib g = new FailingAsyncFib(9);
909                  AsyncFib h = new AsyncFib(7);
910                  try {
911                      invokeAll(f, g, h);
912                      shouldThrow();
913 <                } catch (FJException success) {}
913 >                } catch (FJException success) {
914 >                    checkCompletedAbnormally(g, success);
915 >                }
916              }};
917          testInvokeOnPool(mainPool(), a);
918      }
# Line 805 | Line 922 | public class ForkJoinTaskTest extends JS
922       */
923      public void testAbnormalInvokeAllCollection() {
924          RecursiveAction a = new CheckedRecursiveAction() {
925 <            public void realCompute() {
925 >            protected void realCompute() {
926                  FailingAsyncFib f = new FailingAsyncFib(8);
927                  AsyncFib g = new AsyncFib(9);
928                  AsyncFib h = new AsyncFib(7);
# Line 816 | Line 933 | public class ForkJoinTaskTest extends JS
933                  try {
934                      invokeAll(set);
935                      shouldThrow();
936 <                } catch (FJException success) {}
936 >                } catch (FJException success) {
937 >                    checkCompletedAbnormally(f, success);
938 >                }
939              }};
940          testInvokeOnPool(mainPool(), a);
941      }
# Line 827 | Line 946 | public class ForkJoinTaskTest extends JS
946       */
947      public void testTryUnfork() {
948          RecursiveAction a = new CheckedRecursiveAction() {
949 <            public void realCompute() {
949 >            protected void realCompute() {
950                  AsyncFib g = new AsyncFib(9);
951                  assertSame(g, g.fork());
952                  AsyncFib f = new AsyncFib(8);
953                  assertSame(f, f.fork());
954                  assertTrue(f.tryUnfork());
955                  helpQuiesce();
956 <                assertFalse(f.isDone());
957 <                assertTrue(g.isDone());
956 >                checkNotDone(f);
957 >                checkCompletedNormally(g);
958              }};
959          testInvokeOnPool(singletonPool(), a);
960      }
# Line 846 | Line 965 | public class ForkJoinTaskTest extends JS
965       */
966      public void testGetSurplusQueuedTaskCount() {
967          RecursiveAction a = new CheckedRecursiveAction() {
968 <            public void realCompute() {
968 >            protected void realCompute() {
969                  AsyncFib h = new AsyncFib(7);
970                  assertSame(h, h.fork());
971                  AsyncFib g = new AsyncFib(9);
# Line 855 | Line 974 | public class ForkJoinTaskTest extends JS
974                  assertSame(f, f.fork());
975                  assertTrue(getSurplusQueuedTaskCount() > 0);
976                  helpQuiesce();
977 +                assertEquals(0, getSurplusQueuedTaskCount());
978 +                checkCompletedNormally(f);
979 +                checkCompletedNormally(g);
980 +                checkCompletedNormally(h);
981              }};
982          testInvokeOnPool(singletonPool(), a);
983      }
# Line 864 | Line 987 | public class ForkJoinTaskTest extends JS
987       */
988      public void testPeekNextLocalTask() {
989          RecursiveAction a = new CheckedRecursiveAction() {
990 <            public void realCompute() {
990 >            protected void realCompute() {
991                  AsyncFib g = new AsyncFib(9);
992                  assertSame(g, g.fork());
993                  AsyncFib f = new AsyncFib(8);
994                  assertSame(f, f.fork());
995                  assertSame(f, peekNextLocalTask());
996                  assertNull(f.join());
997 <                assertTrue(f.isDone());
997 >                checkCompletedNormally(f);
998                  helpQuiesce();
999 +                checkCompletedNormally(g);
1000              }};
1001          testInvokeOnPool(singletonPool(), a);
1002      }
1003  
1004      /**
1005 <     * pollNextLocalTask returns most recent unexecuted task
1006 <     * without executing it
1005 >     * pollNextLocalTask returns most recent unexecuted task without
1006 >     * executing it
1007       */
1008      public void testPollNextLocalTask() {
1009          RecursiveAction a = new CheckedRecursiveAction() {
1010 <            public void realCompute() {
1010 >            protected void realCompute() {
1011                  AsyncFib g = new AsyncFib(9);
1012                  assertSame(g, g.fork());
1013                  AsyncFib f = new AsyncFib(8);
1014                  assertSame(f, f.fork());
1015                  assertSame(f, pollNextLocalTask());
1016                  helpQuiesce();
1017 <                assertFalse(f.isDone());
1017 >                checkNotDone(f);
1018 >                assertEquals(34, g.number);
1019 >                checkCompletedNormally(g);
1020              }};
1021          testInvokeOnPool(singletonPool(), a);
1022      }
1023  
1024      /**
1025 <     * pollTask returns an unexecuted task
900 <     * without executing it
1025 >     * pollTask returns an unexecuted task without executing it
1026       */
1027      public void testPollTask() {
1028          RecursiveAction a = new CheckedRecursiveAction() {
1029 <            public void realCompute() {
1029 >            protected void realCompute() {
1030                  AsyncFib g = new AsyncFib(9);
1031                  assertSame(g, g.fork());
1032                  AsyncFib f = new AsyncFib(8);
1033                  assertSame(f, f.fork());
1034                  assertSame(f, pollTask());
1035                  helpQuiesce();
1036 <                assertFalse(f.isDone());
1037 <                assertTrue(g.isDone());
1036 >                checkNotDone(f);
1037 >                checkCompletedNormally(g);
1038              }};
1039          testInvokeOnPool(singletonPool(), a);
1040      }
# Line 919 | Line 1044 | public class ForkJoinTaskTest extends JS
1044       */
1045      public void testPeekNextLocalTaskAsync() {
1046          RecursiveAction a = new CheckedRecursiveAction() {
1047 <            public void realCompute() {
1047 >            protected void realCompute() {
1048                  AsyncFib g = new AsyncFib(9);
1049                  assertSame(g, g.fork());
1050                  AsyncFib f = new AsyncFib(8);
# Line 927 | Line 1052 | public class ForkJoinTaskTest extends JS
1052                  assertSame(g, peekNextLocalTask());
1053                  assertNull(f.join());
1054                  helpQuiesce();
1055 <                assertTrue(f.isDone());
1055 >                checkCompletedNormally(f);
1056 >                assertEquals(34, g.number);
1057 >                checkCompletedNormally(g);
1058              }};
1059          testInvokeOnPool(asyncSingletonPool(), a);
1060      }
1061  
1062      /**
1063 <     * pollNextLocalTask returns least recent unexecuted task
1064 <     * without executing it, in async mode
1063 >     * pollNextLocalTask returns least recent unexecuted task without
1064 >     * executing it, in async mode
1065       */
1066      public void testPollNextLocalTaskAsync() {
1067          RecursiveAction a = new CheckedRecursiveAction() {
1068 <            public void realCompute() {
1068 >            protected void realCompute() {
1069                  AsyncFib g = new AsyncFib(9);
1070                  assertSame(g, g.fork());
1071                  AsyncFib f = new AsyncFib(8);
1072                  assertSame(f, f.fork());
1073                  assertSame(g, pollNextLocalTask());
1074                  helpQuiesce();
1075 <                assertTrue(f.isDone());
1076 <                assertFalse(g.isDone());
1075 >                assertEquals(21, f.number);
1076 >                checkCompletedNormally(f);
1077 >                checkNotDone(g);
1078              }};
1079          testInvokeOnPool(asyncSingletonPool(), a);
1080      }
1081  
1082      /**
1083 <     * pollTask returns an unexecuted task
1084 <     * without executing it, in async mode
1083 >     * pollTask returns an unexecuted task without executing it, in
1084 >     * async mode
1085       */
1086      public void testPollTaskAsync() {
1087          RecursiveAction a = new CheckedRecursiveAction() {
1088 <            public void realCompute() {
1088 >            protected void realCompute() {
1089                  AsyncFib g = new AsyncFib(9);
1090                  assertSame(g, g.fork());
1091                  AsyncFib f = new AsyncFib(8);
1092                  assertSame(f, f.fork());
1093                  assertSame(g, pollTask());
1094                  helpQuiesce();
1095 <                assertTrue(f.isDone());
1096 <                assertFalse(g.isDone());
1095 >                assertEquals(21, f.number);
1096 >                checkCompletedNormally(f);
1097 >                checkNotDone(g);
1098              }};
1099          testInvokeOnPool(asyncSingletonPool(), a);
1100      }
# Line 975 | Line 1104 | public class ForkJoinTaskTest extends JS
1104      /**
1105       * invoke returns when task completes normally.
1106       * isCompletedAbnormally and isCancelled return false for normally
1107 <     * completed tasks. getRawResult of a RecursiveAction returns null;
1107 >     * completed tasks; getRawResult returns null.
1108       */
1109      public void testInvokeSingleton() {
1110          RecursiveAction a = new CheckedRecursiveAction() {
1111 <            public void realCompute() {
1111 >            protected void realCompute() {
1112                  AsyncFib f = new AsyncFib(8);
1113                  assertNull(f.invoke());
1114                  assertEquals(21, f.number);
1115 <                assertTrue(f.isDone());
987 <                assertFalse(f.isCancelled());
988 <                assertFalse(f.isCompletedAbnormally());
989 <                assertNull(f.getRawResult());
1115 >                checkCompletedNormally(f);
1116              }};
1117          testInvokeOnPool(singletonPool(), a);
1118      }
# Line 998 | Line 1124 | public class ForkJoinTaskTest extends JS
1124       */
1125      public void testQuietlyInvokeSingleton() {
1126          RecursiveAction a = new CheckedRecursiveAction() {
1127 <            public void realCompute() {
1127 >            protected void realCompute() {
1128                  AsyncFib f = new AsyncFib(8);
1129                  f.quietlyInvoke();
1130                  assertEquals(21, f.number);
1131 <                assertTrue(f.isDone());
1006 <                assertFalse(f.isCancelled());
1007 <                assertFalse(f.isCompletedAbnormally());
1008 <                assertNull(f.getRawResult());
1131 >                checkCompletedNormally(f);
1132              }};
1133          testInvokeOnPool(singletonPool(), a);
1134      }
# Line 1015 | Line 1138 | public class ForkJoinTaskTest extends JS
1138       */
1139      public void testForkJoinSingleton() {
1140          RecursiveAction a = new CheckedRecursiveAction() {
1141 <            public void realCompute() {
1141 >            protected void realCompute() {
1142                  AsyncFib f = new AsyncFib(8);
1143                  assertSame(f, f.fork());
1144                  assertNull(f.join());
1145                  assertEquals(21, f.number);
1146 <                assertTrue(f.isDone());
1024 <                assertNull(f.getRawResult());
1146 >                checkCompletedNormally(f);
1147              }};
1148          testInvokeOnPool(singletonPool(), a);
1149      }
# Line 1031 | Line 1153 | public class ForkJoinTaskTest extends JS
1153       */
1154      public void testForkGetSingleton() {
1155          RecursiveAction a = new CheckedRecursiveAction() {
1156 <            public void realCompute() throws Exception {
1156 >            protected void realCompute() throws Exception {
1157                  AsyncFib f = new AsyncFib(8);
1158                  assertSame(f, f.fork());
1159                  assertNull(f.get());
1160                  assertEquals(21, f.number);
1161 <                assertTrue(f.isDone());
1161 >                checkCompletedNormally(f);
1162              }};
1163          testInvokeOnPool(singletonPool(), a);
1164      }
# Line 1046 | Line 1168 | public class ForkJoinTaskTest extends JS
1168       */
1169      public void testForkTimedGetSingleton() {
1170          RecursiveAction a = new CheckedRecursiveAction() {
1171 <            public void realCompute() throws Exception {
1171 >            protected void realCompute() throws Exception {
1172                  AsyncFib f = new AsyncFib(8);
1173                  assertSame(f, f.fork());
1174                  assertNull(f.get(LONG_DELAY_MS, MILLISECONDS));
1175                  assertEquals(21, f.number);
1176 <                assertTrue(f.isDone());
1176 >                checkCompletedNormally(f);
1177              }};
1178          testInvokeOnPool(singletonPool(), a);
1179      }
# Line 1061 | Line 1183 | public class ForkJoinTaskTest extends JS
1183       */
1184      public void testForkTimedGetNPESingleton() {
1185          RecursiveAction a = new CheckedRecursiveAction() {
1186 <            public void realCompute() throws Exception {
1186 >            protected void realCompute() throws Exception {
1187                  AsyncFib f = new AsyncFib(8);
1188                  assertSame(f, f.fork());
1189                  try {
# Line 1077 | Line 1199 | public class ForkJoinTaskTest extends JS
1199       */
1200      public void testForkQuietlyJoinSingleton() {
1201          RecursiveAction a = new CheckedRecursiveAction() {
1202 <            public void realCompute() {
1202 >            protected void realCompute() {
1203                  AsyncFib f = new AsyncFib(8);
1204                  assertSame(f, f.fork());
1205                  f.quietlyJoin();
1206                  assertEquals(21, f.number);
1207 <                assertTrue(f.isDone());
1207 >                checkCompletedNormally(f);
1208              }};
1209          testInvokeOnPool(singletonPool(), a);
1210      }
1211  
1090
1212      /**
1213       * helpQuiesce returns when tasks are complete.
1214       * getQueuedTaskCount returns 0 when quiescent
1215       */
1216      public void testForkHelpQuiesceSingleton() {
1217          RecursiveAction a = new CheckedRecursiveAction() {
1218 <            public void realCompute() {
1218 >            protected void realCompute() {
1219                  AsyncFib f = new AsyncFib(8);
1220                  assertSame(f, f.fork());
1221 <                f.helpQuiesce();
1101 <                assertEquals(21, f.number);
1102 <                assertTrue(f.isDone());
1221 >                helpQuiesce();
1222                  assertEquals(0, getQueuedTaskCount());
1223 +                assertEquals(21, f.number);
1224 +                checkCompletedNormally(f);
1225              }};
1226          testInvokeOnPool(singletonPool(), a);
1227      }
1228  
1108
1229      /**
1230       * invoke task throws exception when task completes abnormally
1231       */
1232      public void testAbnormalInvokeSingleton() {
1233          RecursiveAction a = new CheckedRecursiveAction() {
1234 <            public void realCompute() {
1234 >            protected void realCompute() {
1235                  FailingAsyncFib f = new FailingAsyncFib(8);
1236                  try {
1237                      f.invoke();
1238                      shouldThrow();
1239 <                } catch (FJException success) {}
1239 >                } catch (FJException success) {
1240 >                    checkCompletedAbnormally(f, success);
1241 >                }
1242              }};
1243          testInvokeOnPool(singletonPool(), a);
1244      }
# Line 1126 | Line 1248 | public class ForkJoinTaskTest extends JS
1248       */
1249      public void testAbnormalQuietlyInvokeSingleton() {
1250          RecursiveAction a = new CheckedRecursiveAction() {
1251 <            public void realCompute() {
1251 >            protected void realCompute() {
1252                  FailingAsyncFib f = new FailingAsyncFib(8);
1253                  f.quietlyInvoke();
1254 <                assertTrue(f.isDone());
1254 >                assertTrue(f.getException() instanceof FJException);
1255 >                checkCompletedAbnormally(f, f.getException());
1256              }};
1257          testInvokeOnPool(singletonPool(), a);
1258      }
# Line 1139 | Line 1262 | public class ForkJoinTaskTest extends JS
1262       */
1263      public void testAbnormalForkJoinSingleton() {
1264          RecursiveAction a = new CheckedRecursiveAction() {
1265 <            public void realCompute() {
1265 >            protected void realCompute() {
1266                  FailingAsyncFib f = new FailingAsyncFib(8);
1267                  assertSame(f, f.fork());
1268                  try {
1269                      f.join();
1270                      shouldThrow();
1271 <                } catch (FJException success) {}
1271 >                } catch (FJException success) {
1272 >                    checkCompletedAbnormally(f, success);
1273 >                }
1274              }};
1275          testInvokeOnPool(singletonPool(), a);
1276      }
# Line 1155 | Line 1280 | public class ForkJoinTaskTest extends JS
1280       */
1281      public void testAbnormalForkGetSingleton() {
1282          RecursiveAction a = new CheckedRecursiveAction() {
1283 <            public void realCompute() throws Exception {
1283 >            protected void realCompute() throws Exception {
1284                  FailingAsyncFib f = new FailingAsyncFib(8);
1285                  assertSame(f, f.fork());
1286                  try {
# Line 1164 | Line 1289 | public class ForkJoinTaskTest extends JS
1289                  } catch (ExecutionException success) {
1290                      Throwable cause = success.getCause();
1291                      assertTrue(cause instanceof FJException);
1292 <                    assertTrue(f.isDone());
1168 <                    assertTrue(f.isCompletedAbnormally());
1169 <                    assertSame(cause, f.getException());
1292 >                    checkCompletedAbnormally(f, cause);
1293                  }
1294              }};
1295          testInvokeOnPool(singletonPool(), a);
# Line 1177 | Line 1300 | public class ForkJoinTaskTest extends JS
1300       */
1301      public void testAbnormalForkTimedGetSingleton() {
1302          RecursiveAction a = new CheckedRecursiveAction() {
1303 <            public void realCompute() throws Exception {
1303 >            protected void realCompute() throws Exception {
1304                  FailingAsyncFib f = new FailingAsyncFib(8);
1305                  assertSame(f, f.fork());
1306                  try {
# Line 1186 | Line 1309 | public class ForkJoinTaskTest extends JS
1309                  } catch (ExecutionException success) {
1310                      Throwable cause = success.getCause();
1311                      assertTrue(cause instanceof FJException);
1312 <                    assertTrue(f.isDone());
1190 <                    assertTrue(f.isCompletedAbnormally());
1191 <                    assertSame(cause, f.getException());
1312 >                    checkCompletedAbnormally(f, cause);
1313                  }
1314              }};
1315          testInvokeOnPool(singletonPool(), a);
# Line 1199 | Line 1320 | public class ForkJoinTaskTest extends JS
1320       */
1321      public void testAbnormalForkQuietlyJoinSingleton() {
1322          RecursiveAction a = new CheckedRecursiveAction() {
1323 <            public void realCompute() {
1323 >            protected void realCompute() {
1324                  FailingAsyncFib f = new FailingAsyncFib(8);
1325                  assertSame(f, f.fork());
1326                  f.quietlyJoin();
1206                assertTrue(f.isDone());
1207                assertTrue(f.isCompletedAbnormally());
1327                  assertTrue(f.getException() instanceof FJException);
1328 +                checkCompletedAbnormally(f, f.getException());
1329              }};
1330          testInvokeOnPool(singletonPool(), a);
1331      }
# Line 1215 | Line 1335 | public class ForkJoinTaskTest extends JS
1335       */
1336      public void testCancelledInvokeSingleton() {
1337          RecursiveAction a = new CheckedRecursiveAction() {
1338 <            public void realCompute() {
1338 >            protected void realCompute() {
1339                  AsyncFib f = new AsyncFib(8);
1340                  assertTrue(f.cancel(true));
1341                  try {
1342                      f.invoke();
1343                      shouldThrow();
1344                  } catch (CancellationException success) {
1345 <                    assertTrue(f.isDone());
1226 <                    assertTrue(f.isCancelled());
1227 <                    assertTrue(f.isCompletedAbnormally());
1228 <                    assertTrue(f.getException() instanceof CancellationException);
1345 >                    checkCancelled(f);
1346                  }
1347              }};
1348          testInvokeOnPool(singletonPool(), a);
# Line 1236 | Line 1353 | public class ForkJoinTaskTest extends JS
1353       */
1354      public void testCancelledForkJoinSingleton() {
1355          RecursiveAction a = new CheckedRecursiveAction() {
1356 <            public void realCompute() {
1356 >            protected void realCompute() {
1357                  AsyncFib f = new AsyncFib(8);
1358                  assertTrue(f.cancel(true));
1359                  assertSame(f, f.fork());
# Line 1244 | Line 1361 | public class ForkJoinTaskTest extends JS
1361                      f.join();
1362                      shouldThrow();
1363                  } catch (CancellationException success) {
1364 <                    assertTrue(f.isDone());
1248 <                    assertTrue(f.isCancelled());
1249 <                    assertTrue(f.isCompletedAbnormally());
1250 <                    assertTrue(f.getException() instanceof CancellationException);
1364 >                    checkCancelled(f);
1365                  }
1366              }};
1367          testInvokeOnPool(singletonPool(), a);
# Line 1258 | Line 1372 | public class ForkJoinTaskTest extends JS
1372       */
1373      public void testCancelledForkGetSingleton() {
1374          RecursiveAction a = new CheckedRecursiveAction() {
1375 <            public void realCompute() throws Exception {
1375 >            protected void realCompute() throws Exception {
1376                  AsyncFib f = new AsyncFib(8);
1377                  assertTrue(f.cancel(true));
1378                  assertSame(f, f.fork());
# Line 1266 | Line 1380 | public class ForkJoinTaskTest extends JS
1380                      f.get();
1381                      shouldThrow();
1382                  } catch (CancellationException success) {
1383 <                    assertTrue(f.isDone());
1270 <                    assertTrue(f.isCancelled());
1271 <                    assertTrue(f.isCompletedAbnormally());
1272 <                    assertTrue(f.getException() instanceof CancellationException);
1383 >                    checkCancelled(f);
1384                  }
1385              }};
1386          testInvokeOnPool(singletonPool(), a);
# Line 1280 | Line 1391 | public class ForkJoinTaskTest extends JS
1391       */
1392      public void testCancelledForkTimedGetSingleton() throws Exception {
1393          RecursiveAction a = new CheckedRecursiveAction() {
1394 <            public void realCompute() throws Exception {
1394 >            protected void realCompute() throws Exception {
1395                  AsyncFib f = new AsyncFib(8);
1396                  assertTrue(f.cancel(true));
1397                  assertSame(f, f.fork());
# Line 1288 | Line 1399 | public class ForkJoinTaskTest extends JS
1399                      f.get(LONG_DELAY_MS, MILLISECONDS);
1400                      shouldThrow();
1401                  } catch (CancellationException success) {
1402 <                    assertTrue(f.isDone());
1292 <                    assertTrue(f.isCancelled());
1293 <                    assertTrue(f.isCompletedAbnormally());
1294 <                    assertTrue(f.getException() instanceof CancellationException);
1402 >                    checkCancelled(f);
1403                  }
1404              }};
1405          testInvokeOnPool(singletonPool(), a);
# Line 1302 | Line 1410 | public class ForkJoinTaskTest extends JS
1410       */
1411      public void testCancelledForkQuietlyJoinSingleton() {
1412          RecursiveAction a = new CheckedRecursiveAction() {
1413 <            public void realCompute() {
1413 >            protected void realCompute() {
1414                  AsyncFib f = new AsyncFib(8);
1415                  assertTrue(f.cancel(true));
1416                  assertSame(f, f.fork());
1417                  f.quietlyJoin();
1418 <                assertTrue(f.isDone());
1311 <                assertTrue(f.isCompletedAbnormally());
1312 <                assertTrue(f.isCancelled());
1313 <                assertTrue(f.getException() instanceof CancellationException);
1418 >                checkCancelled(f);
1419              }};
1420          testInvokeOnPool(singletonPool(), a);
1421      }
# Line 1320 | Line 1425 | public class ForkJoinTaskTest extends JS
1425       */
1426      public void testCompleteExceptionallySingleton() {
1427          RecursiveAction a = new CheckedRecursiveAction() {
1428 <            public void realCompute() {
1428 >            protected void realCompute() {
1429                  AsyncFib f = new AsyncFib(8);
1430                  f.completeExceptionally(new FJException());
1431                  try {
1432                      f.invoke();
1433                      shouldThrow();
1434 <                } catch (FJException success) {}
1434 >                } catch (FJException success) {
1435 >                    checkCompletedAbnormally(f, success);
1436 >                }
1437              }};
1438          testInvokeOnPool(singletonPool(), a);
1439      }
# Line 1336 | Line 1443 | public class ForkJoinTaskTest extends JS
1443       */
1444      public void testInvokeAll2Singleton() {
1445          RecursiveAction a = new CheckedRecursiveAction() {
1446 <            public void realCompute() {
1446 >            protected void realCompute() {
1447                  AsyncFib f = new AsyncFib(8);
1448                  AsyncFib g = new AsyncFib(9);
1449                  invokeAll(f, g);
1343                assertTrue(f.isDone());
1450                  assertEquals(21, f.number);
1345                assertTrue(g.isDone());
1451                  assertEquals(34, g.number);
1452 +                checkCompletedNormally(f);
1453 +                checkCompletedNormally(g);
1454              }};
1455          testInvokeOnPool(singletonPool(), a);
1456      }
# Line 1353 | Line 1460 | public class ForkJoinTaskTest extends JS
1460       */
1461      public void testInvokeAll1Singleton() {
1462          RecursiveAction a = new CheckedRecursiveAction() {
1463 <            public void realCompute() {
1463 >            protected void realCompute() {
1464                  AsyncFib f = new AsyncFib(8);
1465                  invokeAll(f);
1466 <                assertTrue(f.isDone());
1466 >                checkCompletedNormally(f);
1467                  assertEquals(21, f.number);
1468              }};
1469          testInvokeOnPool(singletonPool(), a);
# Line 1367 | Line 1474 | public class ForkJoinTaskTest extends JS
1474       */
1475      public void testInvokeAll3Singleton() {
1476          RecursiveAction a = new CheckedRecursiveAction() {
1477 <            public void realCompute() {
1477 >            protected void realCompute() {
1478                  AsyncFib f = new AsyncFib(8);
1479                  AsyncFib g = new AsyncFib(9);
1480                  AsyncFib h = new AsyncFib(7);
1481                  invokeAll(f, g, h);
1375                assertTrue(f.isDone());
1482                  assertEquals(21, f.number);
1377                assertTrue(g.isDone());
1483                  assertEquals(34, g.number);
1379                assertTrue(h.isDone());
1484                  assertEquals(13, h.number);
1485 +                checkCompletedNormally(f);
1486 +                checkCompletedNormally(g);
1487 +                checkCompletedNormally(h);
1488              }};
1489          testInvokeOnPool(singletonPool(), a);
1490      }
# Line 1387 | Line 1494 | public class ForkJoinTaskTest extends JS
1494       */
1495      public void testInvokeAllCollectionSingleton() {
1496          RecursiveAction a = new CheckedRecursiveAction() {
1497 <            public void realCompute() {
1497 >            protected void realCompute() {
1498                  AsyncFib f = new AsyncFib(8);
1499                  AsyncFib g = new AsyncFib(9);
1500                  AsyncFib h = new AsyncFib(7);
# Line 1396 | Line 1503 | public class ForkJoinTaskTest extends JS
1503                  set.add(g);
1504                  set.add(h);
1505                  invokeAll(set);
1399                assertTrue(f.isDone());
1506                  assertEquals(21, f.number);
1401                assertTrue(g.isDone());
1507                  assertEquals(34, g.number);
1403                assertTrue(h.isDone());
1508                  assertEquals(13, h.number);
1509 +                checkCompletedNormally(f);
1510 +                checkCompletedNormally(g);
1511 +                checkCompletedNormally(h);
1512              }};
1513          testInvokeOnPool(singletonPool(), a);
1514      }
1515  
1409
1516      /**
1517       * invokeAll(tasks) with any null task throws NPE
1518       */
1519      public void testInvokeAllNPESingleton() {
1520          RecursiveAction a = new CheckedRecursiveAction() {
1521 <            public void realCompute() {
1521 >            protected void realCompute() {
1522                  AsyncFib f = new AsyncFib(8);
1523                  AsyncFib g = new AsyncFib(9);
1524                  AsyncFib h = null;
# Line 1429 | Line 1535 | public class ForkJoinTaskTest extends JS
1535       */
1536      public void testAbnormalInvokeAll2Singleton() {
1537          RecursiveAction a = new CheckedRecursiveAction() {
1538 <            public void realCompute() {
1538 >            protected void realCompute() {
1539                  AsyncFib f = new AsyncFib(8);
1540                  FailingAsyncFib g = new FailingAsyncFib(9);
1541                  try {
1542                      invokeAll(f, g);
1543                      shouldThrow();
1544 <                } catch (FJException success) {}
1544 >                } catch (FJException success) {
1545 >                    checkCompletedAbnormally(g, success);
1546 >                }
1547              }};
1548          testInvokeOnPool(singletonPool(), a);
1549      }
# Line 1445 | Line 1553 | public class ForkJoinTaskTest extends JS
1553       */
1554      public void testAbnormalInvokeAll1Singleton() {
1555          RecursiveAction a = new CheckedRecursiveAction() {
1556 <            public void realCompute() {
1556 >            protected void realCompute() {
1557                  FailingAsyncFib g = new FailingAsyncFib(9);
1558                  try {
1559                      invokeAll(g);
1560                      shouldThrow();
1561 <                } catch (FJException success) {}
1561 >                } catch (FJException success) {
1562 >                    checkCompletedAbnormally(g, success);
1563 >                }
1564              }};
1565          testInvokeOnPool(singletonPool(), a);
1566      }
# Line 1460 | Line 1570 | public class ForkJoinTaskTest extends JS
1570       */
1571      public void testAbnormalInvokeAll3Singleton() {
1572          RecursiveAction a = new CheckedRecursiveAction() {
1573 <            public void realCompute() {
1573 >            protected void realCompute() {
1574                  AsyncFib f = new AsyncFib(8);
1575                  FailingAsyncFib g = new FailingAsyncFib(9);
1576                  AsyncFib h = new AsyncFib(7);
1577                  try {
1578                      invokeAll(f, g, h);
1579                      shouldThrow();
1580 <                } catch (FJException success) {}
1580 >                } catch (FJException success) {
1581 >                    checkCompletedAbnormally(g, success);
1582 >                }
1583              }};
1584          testInvokeOnPool(singletonPool(), a);
1585      }
# Line 1477 | Line 1589 | public class ForkJoinTaskTest extends JS
1589       */
1590      public void testAbnormalInvokeAllCollectionSingleton() {
1591          RecursiveAction a = new CheckedRecursiveAction() {
1592 <            public void realCompute() {
1592 >            protected void realCompute() {
1593                  FailingAsyncFib f = new FailingAsyncFib(8);
1594                  AsyncFib g = new AsyncFib(9);
1595                  AsyncFib h = new AsyncFib(7);
# Line 1488 | Line 1600 | public class ForkJoinTaskTest extends JS
1600                  try {
1601                      invokeAll(set);
1602                      shouldThrow();
1603 <                } catch (FJException success) {}
1603 >                } catch (FJException success) {
1604 >                    checkCompletedAbnormally(f, success);
1605 >                }
1606              }};
1607          testInvokeOnPool(singletonPool(), a);
1608      }
1609  
1610 +
1611 +    /**
1612 +     * ForkJoinTask.quietlyComplete returns when task completes
1613 +     * normally without setting a value. The most recent value
1614 +     * established by setRawResult(V) (or null by default) is returned
1615 +     * from invoke.
1616 +     */
1617 +    public void testQuietlyComplete() {
1618 +        RecursiveAction a = new CheckedRecursiveAction() {
1619 +                protected void realCompute() {
1620 +                    AsyncFib f = new AsyncFib(8);
1621 +                    f.quietlyComplete();
1622 +                    assertEquals(8, f.number);
1623 +                    checkCompletedNormally(f);
1624 +                }};
1625 +        testInvokeOnPool(mainPool(), a);
1626 +    }
1627 +
1628   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines