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

Comparing jsr166/src/test/tck/RecursiveTaskTest.java (file contents):
Revision 1.19 by jsr166, Thu Sep 16 00:52:49 2010 UTC vs.
Revision 1.33 by jsr166, Sun Oct 4 18:28:51 2015 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  
7 < import junit.framework.*;
7 > import static java.util.concurrent.TimeUnit.SECONDS;
8 >
9 > import java.util.HashSet;
10   import java.util.concurrent.CancellationException;
11   import java.util.concurrent.ExecutionException;
12   import java.util.concurrent.ForkJoinPool;
13 + import java.util.concurrent.ForkJoinTask;
14   import java.util.concurrent.RecursiveTask;
15 < import java.util.concurrent.TimeUnit;
16 < import java.util.HashSet;
15 > import java.util.concurrent.TimeoutException;
16 >
17 > import junit.framework.Test;
18 > import junit.framework.TestSuite;
19  
20   public class RecursiveTaskTest extends JSR166TestCase {
21  
22      public static void main(String[] args) {
23 <        junit.textui.TestRunner.run(suite());
23 >        main(suite(), args);
24      }
25      public static Test suite() {
26          return new TestSuite(RecursiveTaskTest.class);
# Line 36 | Line 41 | public class RecursiveTaskTest extends J
41      }
42  
43      private <T> T testInvokeOnPool(ForkJoinPool pool, RecursiveTask<T> a) {
44 <        try {
45 <            assertFalse(a.isDone());
41 <            assertFalse(a.isCompletedNormally());
42 <            assertFalse(a.isCompletedAbnormally());
43 <            assertFalse(a.isCancelled());
44 >        try (PoolCleaner cleaner = cleaner(pool)) {
45 >            checkNotDone(a);
46  
47              T result = pool.invoke(a);
48  
49 <            assertTrue(a.isDone());
48 <            assertTrue(a.isCompletedNormally());
49 <            assertFalse(a.isCompletedAbnormally());
50 <            assertFalse(a.isCancelled());
51 <            assertNull(a.getException());
49 >            checkCompletedNormally(a, result);
50              return result;
53        } finally {
54            joinPool(pool);
51          }
52      }
53  
54 <    static final class FJException extends RuntimeException {
55 <        FJException() { super(); }
54 >    void checkNotDone(RecursiveTask a) {
55 >        assertFalse(a.isDone());
56 >        assertFalse(a.isCompletedNormally());
57 >        assertFalse(a.isCompletedAbnormally());
58 >        assertFalse(a.isCancelled());
59 >        assertNull(a.getException());
60 >        assertNull(a.getRawResult());
61 >
62 >        if (! ForkJoinTask.inForkJoinPool()) {
63 >            Thread.currentThread().interrupt();
64 >            try {
65 >                a.get();
66 >                shouldThrow();
67 >            } catch (InterruptedException success) {
68 >            } catch (Throwable fail) { threadUnexpectedException(fail); }
69 >
70 >            Thread.currentThread().interrupt();
71 >            try {
72 >                a.get(5L, SECONDS);
73 >                shouldThrow();
74 >            } catch (InterruptedException success) {
75 >            } catch (Throwable fail) { threadUnexpectedException(fail); }
76 >        }
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(RecursiveTask<T> a, T expected) {
86 >        assertTrue(a.isDone());
87 >        assertFalse(a.isCancelled());
88 >        assertTrue(a.isCompletedNormally());
89 >        assertFalse(a.isCompletedAbnormally());
90 >        assertNull(a.getException());
91 >        assertSame(expected, a.getRawResult());
92 >        assertSame(expected, a.join());
93 >        assertFalse(a.cancel(false));
94 >        assertFalse(a.cancel(true));
95 >        try {
96 >            assertSame(expected, a.get());
97 >        } catch (Throwable fail) { threadUnexpectedException(fail); }
98 >        try {
99 >            assertSame(expected, a.get(5L, SECONDS));
100 >        } catch (Throwable fail) { threadUnexpectedException(fail); }
101 >    }
102 >
103 >    /**
104 >     * Waits for the task to complete, and checks that when it does,
105 >     * it will have an Integer result equals to the given int.
106 >     */
107 >    void checkCompletesNormally(RecursiveTask<Integer> a, int expected) {
108 >        Integer r = a.join();
109 >        assertEquals(expected, (int) r);
110 >        checkCompletedNormally(a, r);
111 >    }
112 >
113 >    /**
114 >     * Like checkCompletesNormally, but verifies that the task has
115 >     * already completed.
116 >     */
117 >    void checkCompletedNormally(RecursiveTask<Integer> a, int expected) {
118 >        Integer r = a.getRawResult();
119 >        assertEquals(expected, (int) r);
120 >        checkCompletedNormally(a, r);
121 >    }
122 >
123 >    void checkCancelled(RecursiveTask 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 >
131 >        try {
132 >            a.join();
133 >            shouldThrow();
134 >        } catch (CancellationException success) {
135 >        } catch (Throwable fail) { threadUnexpectedException(fail); }
136 >
137 >        try {
138 >            a.get();
139 >            shouldThrow();
140 >        } catch (CancellationException success) {
141 >        } catch (Throwable fail) { threadUnexpectedException(fail); }
142 >
143 >        try {
144 >            a.get(5L, SECONDS);
145 >            shouldThrow();
146 >        } catch (CancellationException success) {
147 >        } catch (Throwable fail) { threadUnexpectedException(fail); }
148 >    }
149 >
150 >    void checkCompletedAbnormally(RecursiveTask a, Throwable t) {
151 >        assertTrue(a.isDone());
152 >        assertFalse(a.isCancelled());
153 >        assertFalse(a.isCompletedNormally());
154 >        assertTrue(a.isCompletedAbnormally());
155 >        assertSame(t.getClass(), a.getException().getClass());
156 >        assertNull(a.getRawResult());
157 >        assertFalse(a.cancel(false));
158 >        assertFalse(a.cancel(true));
159 >
160 >        try {
161 >            a.join();
162 >            shouldThrow();
163 >        } catch (Throwable expected) {
164 >            assertSame(t.getClass(), expected.getClass());
165 >        }
166 >
167 >        try {
168 >            a.get();
169 >            shouldThrow();
170 >        } catch (ExecutionException success) {
171 >            assertSame(t.getClass(), success.getCause().getClass());
172 >        } catch (Throwable fail) { threadUnexpectedException(fail); }
173 >
174 >        try {
175 >            a.get(5L, SECONDS);
176 >            shouldThrow();
177 >        } catch (ExecutionException success) {
178 >            assertSame(t.getClass(), success.getCause().getClass());
179 >        } catch (Throwable fail) { threadUnexpectedException(fail); }
180 >    }
181 >
182 >    public static final class FJException extends RuntimeException {
183 >        public FJException() { super(); }
184      }
185  
186      // An invalid return value for Fib
# Line 74 | Line 198 | public class RecursiveTaskTest extends J
198              f1.fork();
199              return (new FibTask(n - 2)).compute() + f1.join();
200          }
201 +
202 +        public void publicSetRawResult(Integer result) {
203 +            setRawResult(result);
204 +        }
205      }
206  
207      // A recursive action failing in base case
# Line 103 | Line 231 | public class RecursiveTaskTest extends J
231                  FibTask f = new FibTask(8);
232                  Integer r = f.invoke();
233                  assertEquals(21, (int) r);
234 <                assertTrue(f.isDone());
107 <                assertFalse(f.isCancelled());
108 <                assertFalse(f.isCompletedAbnormally());
109 <                assertEquals(21, (int) f.getRawResult());
234 >                checkCompletedNormally(f, r);
235                  return r;
236              }};
237          assertEquals(21, (int) testInvokeOnPool(mainPool(), a));
# Line 122 | Line 247 | public class RecursiveTaskTest extends J
247              public Integer realCompute() {
248                  FibTask f = new FibTask(8);
249                  f.quietlyInvoke();
250 <                Integer r = f.getRawResult();
251 <                assertEquals(21, (int) r);
127 <                assertTrue(f.isDone());
128 <                assertFalse(f.isCancelled());
129 <                assertFalse(f.isCompletedAbnormally());
130 <                return r;
250 >                checkCompletedNormally(f, 21);
251 >                return NoResult;
252              }};
253 <        assertEquals(21, (int) testInvokeOnPool(mainPool(), a));
253 >        assertSame(NoResult, testInvokeOnPool(mainPool(), a));
254      }
255  
256      /**
# Line 142 | Line 263 | public class RecursiveTaskTest extends J
263                  assertSame(f, f.fork());
264                  Integer r = f.join();
265                  assertEquals(21, (int) r);
266 <                assertTrue(f.isDone());
266 >                checkCompletedNormally(f, r);
267                  return r;
268              }};
269          assertEquals(21, (int) testInvokeOnPool(mainPool(), a));
# Line 158 | Line 279 | public class RecursiveTaskTest extends J
279                  assertSame(f, f.fork());
280                  Integer r = f.get();
281                  assertEquals(21, (int) r);
282 <                assertTrue(f.isDone());
282 >                checkCompletedNormally(f, r);
283                  return r;
284              }};
285          assertEquals(21, (int) testInvokeOnPool(mainPool(), a));
# Line 172 | Line 293 | public class RecursiveTaskTest extends J
293              public Integer realCompute() throws Exception {
294                  FibTask f = new FibTask(8);
295                  assertSame(f, f.fork());
296 <                Integer r = f.get(5L, TimeUnit.SECONDS);
296 >                Integer r = f.get(5L, SECONDS);
297                  assertEquals(21, (int) r);
298 <                assertTrue(f.isDone());
298 >                checkCompletedNormally(f, r);
299                  return r;
300              }};
301          assertEquals(21, (int) testInvokeOnPool(mainPool(), a));
# Line 191 | Line 312 | public class RecursiveTaskTest extends J
312                  f.quietlyJoin();
313                  Integer r = f.getRawResult();
314                  assertEquals(21, (int) r);
315 <                assertTrue(f.isDone());
315 >                checkCompletedNormally(f, r);
316                  return r;
317              }};
318          assertEquals(21, (int) testInvokeOnPool(mainPool(), a));
319      }
320  
200
321      /**
322       * helpQuiesce returns when tasks are complete.
323       * getQueuedTaskCount returns 0 when quiescent
# Line 207 | Line 327 | public class RecursiveTaskTest extends J
327              public Integer realCompute() {
328                  FibTask f = new FibTask(8);
329                  assertSame(f, f.fork());
330 <                f.helpQuiesce();
211 <                Integer r = f.getRawResult();
212 <                assertEquals(21, (int) r);
213 <                assertTrue(f.isDone());
330 >                helpQuiesce();
331                  assertEquals(0, getQueuedTaskCount());
332 <                return r;
332 >                checkCompletedNormally(f, 21);
333 >                return NoResult;
334              }};
335 <        assertEquals(21, (int) testInvokeOnPool(mainPool(), a));
335 >        assertSame(NoResult, testInvokeOnPool(mainPool(), a));
336      }
337  
220
338      /**
339       * invoke task throws exception when task completes abnormally
340       */
# Line 228 | Line 345 | public class RecursiveTaskTest extends J
345                  try {
346                      f.invoke();
347                      shouldThrow();
348 <                    return NoResult;
349 <                } catch (FJException success) {}
348 >                } catch (FJException success) {
349 >                    checkCompletedAbnormally(f, success);
350 >                }
351                  return NoResult;
352              }};
353          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 243 | Line 361 | public class RecursiveTaskTest extends J
361              public Integer realCompute() {
362                  FailingFibTask f = new FailingFibTask(8);
363                  f.quietlyInvoke();
364 <                assertTrue(f.isDone());
364 >                assertTrue(f.getException() instanceof FJException);
365 >                checkCompletedAbnormally(f, f.getException());
366                  return NoResult;
367              }};
368          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 260 | Line 379 | public class RecursiveTaskTest extends J
379                  try {
380                      Integer r = f.join();
381                      shouldThrow();
382 <                    return r;
383 <                } catch (FJException success) {}
382 >                } catch (FJException success) {
383 >                    checkCompletedAbnormally(f, success);
384 >                }
385                  return NoResult;
386              }};
387          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 278 | Line 398 | public class RecursiveTaskTest extends J
398                  try {
399                      Integer r = f.get();
400                      shouldThrow();
401 <                    return r;
402 <                } catch (ExecutionException success) {}
401 >                } catch (ExecutionException success) {
402 >                    Throwable cause = success.getCause();
403 >                    assertTrue(cause instanceof FJException);
404 >                    checkCompletedAbnormally(f, cause);
405 >                }
406                  return NoResult;
407              }};
408          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 294 | Line 417 | public class RecursiveTaskTest extends J
417                  FailingFibTask f = new FailingFibTask(8);
418                  assertSame(f, f.fork());
419                  try {
420 <                    Integer r = f.get(5L, TimeUnit.SECONDS);
420 >                    Integer r = f.get(5L, SECONDS);
421                      shouldThrow();
422 <                    return r;
423 <                } catch (ExecutionException success) {}
422 >                } catch (ExecutionException success) {
423 >                    Throwable cause = success.getCause();
424 >                    assertTrue(cause instanceof FJException);
425 >                    checkCompletedAbnormally(f, cause);
426 >                }
427                  return NoResult;
428              }};
429          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 312 | Line 438 | public class RecursiveTaskTest extends J
438                  FailingFibTask f = new FailingFibTask(8);
439                  assertSame(f, f.fork());
440                  f.quietlyJoin();
315                assertTrue(f.isDone());
316                assertTrue(f.isCompletedAbnormally());
441                  assertTrue(f.getException() instanceof FJException);
442 +                checkCompletedAbnormally(f, f.getException());
443                  return NoResult;
444              }};
445          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 331 | Line 456 | public class RecursiveTaskTest extends J
456                  try {
457                      Integer r = f.invoke();
458                      shouldThrow();
459 <                    return r;
460 <                } catch (CancellationException success) {}
459 >                } catch (CancellationException success) {
460 >                    checkCancelled(f);
461 >                }
462                  return NoResult;
463              }};
464          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 350 | Line 476 | public class RecursiveTaskTest extends J
476                  try {
477                      Integer r = f.join();
478                      shouldThrow();
479 <                    return r;
480 <                } catch (CancellationException success) {}
479 >                } catch (CancellationException success) {
480 >                    checkCancelled(f);
481 >                }
482                  return NoResult;
483              }};
484          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 369 | Line 496 | public class RecursiveTaskTest extends J
496                  try {
497                      Integer r = f.get();
498                      shouldThrow();
499 <                    return r;
500 <                } catch (CancellationException success) {}
499 >                } catch (CancellationException success) {
500 >                    checkCancelled(f);
501 >                }
502                  return NoResult;
503              }};
504          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 386 | Line 514 | public class RecursiveTaskTest extends J
514                  assertTrue(f.cancel(true));
515                  assertSame(f, f.fork());
516                  try {
517 <                    Integer r = f.get(5L, TimeUnit.SECONDS);
517 >                    Integer r = f.get(5L, SECONDS);
518                      shouldThrow();
519 <                    return r;
520 <                } catch (CancellationException success) {}
519 >                } catch (CancellationException success) {
520 >                    checkCancelled(f);
521 >                }
522                  return NoResult;
523              }};
524          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 405 | Line 534 | public class RecursiveTaskTest extends J
534                  assertTrue(f.cancel(true));
535                  assertSame(f, f.fork());
536                  f.quietlyJoin();
537 <                assertTrue(f.isDone());
409 <                assertTrue(f.isCompletedAbnormally());
410 <                assertTrue(f.isCancelled());
411 <                assertTrue(f.getException() instanceof CancellationException);
537 >                checkCancelled(f);
538                  return NoResult;
539              }};
540          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 457 | Line 583 | public class RecursiveTaskTest extends J
583      public void testInForkJoinPool2() {
584          RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() {
585              public Integer realCompute() {
586 <                assertTrue(!inForkJoinPool());
586 >                assertFalse(inForkJoinPool());
587                  return NoResult;
588              }};
589          assertSame(NoResult, a.invoke());
# Line 474 | Line 600 | public class RecursiveTaskTest extends J
600                  return NoResult;
601              }
602          };
603 <        a.invoke();
603 >        assertSame(NoResult, a.invoke());
604      }
605  
606      /**
607 <     * A reinitialized task may be re-invoked
607 >     * A reinitialized normally completed task may be re-invoked
608       */
609      public void testReinitialize() {
610          RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() {
611              public Integer realCompute() {
612                  FibTask f = new FibTask(8);
613 <                Integer r = f.invoke();
614 <                assertEquals(21, (int) r);
615 <                assertTrue(f.isDone());
616 <                assertFalse(f.isCancelled());
617 <                assertFalse(f.isCompletedAbnormally());
618 <                f.reinitialize();
619 <                r = f.invoke();
620 <                assertEquals(21, (int) r);
613 >                checkNotDone(f);
614 >
615 >                for (int i = 0; i < 3; i++) {
616 >                    Integer r = f.invoke();
617 >                    assertEquals(21, (int) r);
618 >                    checkCompletedNormally(f, r);
619 >                    f.reinitialize();
620 >                    f.publicSetRawResult(null);
621 >                    checkNotDone(f);
622 >                }
623 >                return NoResult;
624 >            }};
625 >        assertSame(NoResult, testInvokeOnPool(mainPool(), a));
626 >    }
627 >
628 >    /**
629 >     * A reinitialized abnormally completed task may be re-invoked
630 >     */
631 >    public void testReinitializeAbnormal() {
632 >        RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() {
633 >            public Integer realCompute() {
634 >                FailingFibTask f = new FailingFibTask(8);
635 >                checkNotDone(f);
636 >
637 >                for (int i = 0; i < 3; i++) {
638 >                    try {
639 >                        f.invoke();
640 >                        shouldThrow();
641 >                    } catch (FJException success) {
642 >                        checkCompletedAbnormally(f, success);
643 >                    }
644 >                    f.reinitialize();
645 >                    checkNotDone(f);
646 >                }
647                  return NoResult;
648              }};
649          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 508 | Line 660 | public class RecursiveTaskTest extends J
660                  try {
661                      Integer r = f.invoke();
662                      shouldThrow();
663 <                    return r;
664 <                } catch (FJException success) {}
663 >                } catch (FJException success) {
664 >                    checkCompletedAbnormally(f, success);
665 >                }
666                  return NoResult;
667              }};
668          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 524 | Line 677 | public class RecursiveTaskTest extends J
677                  FibTask f = new FibTask(8);
678                  f.complete(NoResult);
679                  Integer r = f.invoke();
527                assertTrue(f.isDone());
680                  assertSame(NoResult, r);
681 +                checkCompletedNormally(f, NoResult);
682                  return r;
683              }};
684          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 540 | Line 693 | public class RecursiveTaskTest extends J
693                  FibTask f = new FibTask(8);
694                  FibTask g = new FibTask(9);
695                  invokeAll(f, g);
696 <                assertTrue(f.isDone());
697 <                assertEquals(21, (int) f.join());
545 <                assertTrue(g.isDone());
546 <                assertEquals(34, (int) g.join());
696 >                checkCompletedNormally(f, 21);
697 >                checkCompletedNormally(g, 34);
698                  return NoResult;
699              }};
700          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 557 | Line 708 | public class RecursiveTaskTest extends J
708              public Integer realCompute() {
709                  FibTask f = new FibTask(8);
710                  invokeAll(f);
711 <                assertTrue(f.isDone());
561 <                assertEquals(21, (int) f.join());
711 >                checkCompletedNormally(f, 21);
712                  return NoResult;
713              }};
714          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 575 | Line 725 | public class RecursiveTaskTest extends J
725                  FibTask h = new FibTask(7);
726                  invokeAll(f, g, h);
727                  assertTrue(f.isDone());
578                assertEquals(21, (int) f.join());
728                  assertTrue(g.isDone());
580                assertEquals(34, (int) g.join());
729                  assertTrue(h.isDone());
730 <                assertEquals(13, (int) h.join());
730 >                checkCompletedNormally(f, 21);
731 >                checkCompletedNormally(g, 34);
732 >                checkCompletedNormally(h, 13);
733                  return NoResult;
734              }};
735          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 600 | Line 750 | public class RecursiveTaskTest extends J
750                  set.add(h);
751                  invokeAll(set);
752                  assertTrue(f.isDone());
603                assertEquals(21, (int) f.join());
753                  assertTrue(g.isDone());
605                assertEquals(34, (int) g.join());
754                  assertTrue(h.isDone());
755 <                assertEquals(13, (int) h.join());
755 >                checkCompletedNormally(f, 21);
756 >                checkCompletedNormally(g, 34);
757 >                checkCompletedNormally(h, 13);
758                  return NoResult;
759              }};
760          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
761      }
762  
763 +    /**
764 +     * invokeAll(tasks) with any null task throws NPE
765 +     */
766 +    public void testInvokeAllNPE() {
767 +        RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() {
768 +            public Integer realCompute() {
769 +                FibTask f = new FibTask(8);
770 +                FibTask g = new FibTask(9);
771 +                FibTask h = null;
772 +                try {
773 +                    invokeAll(f, g, h);
774 +                    shouldThrow();
775 +                } catch (NullPointerException success) {}
776 +                return NoResult;
777 +            }};
778 +        assertSame(NoResult, testInvokeOnPool(mainPool(), a));
779 +    }
780  
781      /**
782       * invokeAll(t1, t2) throw exception if any task does
# Line 622 | Line 789 | public class RecursiveTaskTest extends J
789                  try {
790                      invokeAll(f, g);
791                      shouldThrow();
792 <                    return NoResult;
793 <                } catch (FJException success) {}
792 >                } catch (FJException success) {
793 >                    checkCompletedAbnormally(g, success);
794 >                }
795                  return NoResult;
796              }};
797          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 639 | Line 807 | public class RecursiveTaskTest extends J
807                  try {
808                      invokeAll(g);
809                      shouldThrow();
810 <                    return NoResult;
811 <                } catch (FJException success) {}
810 >                } catch (FJException success) {
811 >                    checkCompletedAbnormally(g, success);
812 >                }
813                  return NoResult;
814              }};
815          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 658 | Line 827 | public class RecursiveTaskTest extends J
827                  try {
828                      invokeAll(f, g, h);
829                      shouldThrow();
830 <                    return NoResult;
831 <                } catch (FJException success) {}
830 >                } catch (FJException success) {
831 >                    checkCompletedAbnormally(g, success);
832 >                }
833                  return NoResult;
834              }};
835          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 681 | Line 851 | public class RecursiveTaskTest extends J
851                  try {
852                      invokeAll(set);
853                      shouldThrow();
854 <                    return NoResult;
855 <                } catch (FJException success) {}
854 >                } catch (FJException success) {
855 >                    checkCompletedAbnormally(f, success);
856 >                }
857                  return NoResult;
858              }};
859          assertSame(NoResult, testInvokeOnPool(mainPool(), a));
# Line 701 | Line 872 | public class RecursiveTaskTest extends J
872                  assertSame(f, f.fork());
873                  assertTrue(f.tryUnfork());
874                  helpQuiesce();
875 <                assertFalse(f.isDone());
876 <                assertTrue(g.isDone());
875 >                checkNotDone(f);
876 >                checkCompletedNormally(g, 34);
877                  return NoResult;
878              }};
879          assertSame(NoResult, testInvokeOnPool(singletonPool(), a));
# Line 723 | Line 894 | public class RecursiveTaskTest extends J
894                  assertSame(f, f.fork());
895                  assertTrue(getSurplusQueuedTaskCount() > 0);
896                  helpQuiesce();
897 +                assertEquals(0, getSurplusQueuedTaskCount());
898 +                checkCompletedNormally(f, 21);
899 +                checkCompletedNormally(g, 34);
900 +                checkCompletedNormally(h, 13);
901                  return NoResult;
902              }};
903          assertSame(NoResult, testInvokeOnPool(singletonPool(), a));
# Line 739 | Line 914 | public class RecursiveTaskTest extends J
914                  FibTask f = new FibTask(8);
915                  assertSame(f, f.fork());
916                  assertSame(f, peekNextLocalTask());
917 <                assertEquals(21, (int) f.join());
743 <                assertTrue(f.isDone());
917 >                checkCompletesNormally(f, 21);
918                  helpQuiesce();
919 +                checkCompletedNormally(g, 34);
920                  return NoResult;
921              }};
922          assertSame(NoResult, testInvokeOnPool(singletonPool(), a));
# Line 760 | Line 935 | public class RecursiveTaskTest extends J
935                  assertSame(f, f.fork());
936                  assertSame(f, pollNextLocalTask());
937                  helpQuiesce();
938 <                assertFalse(f.isDone());
938 >                checkNotDone(f);
939 >                checkCompletedNormally(g, 34);
940                  return NoResult;
941              }};
942          assertSame(NoResult, testInvokeOnPool(singletonPool(), a));
# Line 778 | Line 954 | public class RecursiveTaskTest extends J
954                  assertSame(f, f.fork());
955                  assertSame(f, pollTask());
956                  helpQuiesce();
957 <                assertFalse(f.isDone());
958 <                assertTrue(g.isDone());
957 >                checkNotDone(f);
958 >                checkCompletedNormally(g, 34);
959                  return NoResult;
960              }};
961          assertSame(NoResult, testInvokeOnPool(singletonPool(), a));
# Line 798 | Line 974 | public class RecursiveTaskTest extends J
974                  assertSame(g, peekNextLocalTask());
975                  assertEquals(21, (int) f.join());
976                  helpQuiesce();
977 <                assertTrue(f.isDone());
977 >                checkCompletedNormally(f, 21);
978 >                checkCompletedNormally(g, 34);
979                  return NoResult;
980              }};
981          assertSame(NoResult, testInvokeOnPool(asyncSingletonPool(), a));
982      }
983  
984      /**
985 <     * pollNextLocalTask returns least recent unexecuted task
986 <     * without executing it, in async mode
985 >     * pollNextLocalTask returns least recent unexecuted task without
986 >     * executing it, in async mode
987       */
988      public void testPollNextLocalTaskAsync() {
989          RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() {
# Line 817 | Line 994 | public class RecursiveTaskTest extends J
994                  assertSame(f, f.fork());
995                  assertSame(g, pollNextLocalTask());
996                  helpQuiesce();
997 <                assertTrue(f.isDone());
998 <                assertFalse(g.isDone());
997 >                checkCompletedNormally(f, 21);
998 >                checkNotDone(g);
999                  return NoResult;
1000              }};
1001          assertSame(NoResult, testInvokeOnPool(asyncSingletonPool(), a));
1002      }
1003  
1004      /**
1005 <     * pollTask returns an unexecuted task
1006 <     * without executing it, in async mode
1005 >     * pollTask returns an unexecuted task without executing it, in
1006 >     * async mode
1007       */
1008      public void testPollTaskAsync() {
1009          RecursiveTask<Integer> a = new CheckedRecursiveTask<Integer>() {
# Line 837 | Line 1014 | public class RecursiveTaskTest extends J
1014                  assertSame(f, f.fork());
1015                  assertSame(g, pollTask());
1016                  helpQuiesce();
1017 <                assertTrue(f.isDone());
1018 <                assertFalse(g.isDone());
1017 >                checkCompletedNormally(f, 21);
1018 >                checkNotDone(g);
1019                  return NoResult;
1020              }};
1021          assertSame(NoResult, testInvokeOnPool(asyncSingletonPool(), a));

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines