--- jsr166/src/test/tck/CompletableFutureTest.java 2013/04/08 16:58:17 1.21 +++ jsr166/src/test/tck/CompletableFutureTest.java 2013/04/14 05:45:38 1.24 @@ -160,7 +160,7 @@ public class CompletableFutureTest exten * by methods isDone, isCancelled, and getNow */ public void testConstructor() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); checkIncomplete(f); } @@ -169,7 +169,7 @@ public class CompletableFutureTest exten * isCancelled, join, get, and getNow */ public void testComplete() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); checkIncomplete(f); f.complete(one); checkCompletedNormally(f, one); @@ -180,7 +180,7 @@ public class CompletableFutureTest exten * methods isDone, isCancelled, join, get, and getNow */ public void testCompleteExceptionally() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); checkIncomplete(f); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(f); @@ -191,7 +191,7 @@ public class CompletableFutureTest exten * methods isDone, isCancelled, join, get, and getNow */ public void testCancel() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); checkIncomplete(f); assertTrue(f.cancel(true)); checkCancelled(f); @@ -201,7 +201,7 @@ public class CompletableFutureTest exten * obtrudeValue forces completion with given value */ public void testObtrudeValue() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); checkIncomplete(f); f.complete(one); checkCompletedNormally(f, one); @@ -209,10 +209,10 @@ public class CompletableFutureTest exten checkCompletedNormally(f, three); f.obtrudeValue(two); checkCompletedNormally(f, two); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.obtrudeValue(three); checkCompletedNormally(f, three); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.completeExceptionally(new CFException()); f.obtrudeValue(four); checkCompletedNormally(f, four); @@ -222,16 +222,16 @@ public class CompletableFutureTest exten * obtrudeException forces completion with given exception */ public void testObtrudeException() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); checkIncomplete(f); f.complete(one); checkCompletedNormally(f, one); f.obtrudeException(new CFException()); checkCompletedWithWrappedCFException(f); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.obtrudeException(new CFException()); checkCompletedWithWrappedCFException(f); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.completeExceptionally(new CFException()); f.obtrudeValue(four); checkCompletedNormally(f, four); @@ -243,7 +243,7 @@ public class CompletableFutureTest exten * getNumberOfDependents returns number of dependent tasks */ public void testGetNumberOfDependents() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); assertEquals(f.getNumberOfDependents(), 0); CompletableFuture g = f.thenRun(new Noop()); assertEquals(f.getNumberOfDependents(), 1); @@ -294,10 +294,10 @@ public class CompletableFutureTest exten int value; public void accept(Integer x) { value = x.intValue() + 1; } } - static final class AddAction implements BiConsumer { + static final class SubtractAction implements BiConsumer { int value; public void accept(Integer x, Integer y) { - value = x.intValue() + y.intValue(); + value = x.intValue() - y.intValue(); } } static final class Noop implements Runnable { @@ -335,7 +335,7 @@ public class CompletableFutureTest exten boolean ran; public CompletableFuture apply(Integer x) { ran = true; - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); f.complete(Integer.valueOf(x.intValue() + 1)); return f; } @@ -377,13 +377,13 @@ public class CompletableFutureTest exten * exception; otherwise with source value */ public void testExceptionally() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); ExceptionToInteger r = new ExceptionToInteger(); CompletableFuture g = f.exceptionally(r); f.completeExceptionally(new CFException()); checkCompletedNormally(g, three); - f = new CompletableFuture(); + f = new CompletableFuture<>(); r = new ExceptionToInteger(); g = f.exceptionally(r); f.complete(one); @@ -398,26 +398,26 @@ public class CompletableFutureTest exten CompletableFuture f, g; IntegerHandler r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.completeExceptionally(new CFException()); g = f.handle(r = new IntegerHandler()); assertTrue(r.ran); checkCompletedNormally(g, three); - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.handle(r = new IntegerHandler()); assertFalse(r.ran); f.completeExceptionally(new CFException()); checkCompletedNormally(g, three); assertTrue(r.ran); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); g = f.handle(r = new IntegerHandler()); assertTrue(r.ran); checkCompletedNormally(g, two); - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.handle(r = new IntegerHandler()); assertFalse(r.ran); f.complete(one); @@ -495,17 +495,21 @@ public class CompletableFutureTest exten * thenRun result completes normally after normal completion of source */ public void testThenRun() { - CompletableFuture f = new CompletableFuture(); - Noop r = new Noop(); - CompletableFuture g = f.thenRun(r); + CompletableFuture f; + CompletableFuture g; + Noop r; + + f = new CompletableFuture<>(); + g = f.thenRun(r = new Noop()); f.complete(null); checkCompletedNormally(g, null); - // reordered version - f = new CompletableFuture(); + assertTrue(r.ran); + + f = new CompletableFuture<>(); f.complete(null); - r = new Noop(); - g = f.thenRun(r); + g = f.thenRun(r = new Noop()); checkCompletedNormally(g, null); + assertTrue(r.ran); } /** @@ -513,21 +517,39 @@ public class CompletableFutureTest exten * completion of source */ public void testThenRun2() { - CompletableFuture f = new CompletableFuture(); - Noop r = new Noop(); - CompletableFuture g = f.thenRun(r); + CompletableFuture f; + CompletableFuture g; + Noop r; + + f = new CompletableFuture<>(); + g = f.thenRun(r = new Noop()); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); + assertFalse(r.ran); + + f = new CompletableFuture<>(); + f.completeExceptionally(new CFException()); + g = f.thenRun(r = new Noop()); + checkCompletedWithWrappedCFException(g); + assertFalse(r.ran); } /** * thenRun result completes exceptionally if action does */ public void testThenRun3() { - CompletableFuture f = new CompletableFuture(); - FailingNoop r = new FailingNoop(); - CompletableFuture g = f.thenRun(r); + CompletableFuture f; + CompletableFuture g; + FailingNoop r; + + f = new CompletableFuture<>(); + g = f.thenRun(r = new FailingNoop()); + f.complete(null); + checkCompletedWithWrappedCFException(g); + + f = new CompletableFuture<>(); f.complete(null); + g = f.thenRun(r = new FailingNoop()); checkCompletedWithWrappedCFException(g); } @@ -535,10 +557,18 @@ public class CompletableFutureTest exten * thenRun result completes exceptionally if source cancelled */ public void testThenRun4() { - CompletableFuture f = new CompletableFuture(); - Noop r = new Noop(); - CompletableFuture g = f.thenRun(r); + CompletableFuture f; + CompletableFuture g; + Noop r; + + f = new CompletableFuture<>(); + g = f.thenRun(r = new Noop()); + assertTrue(f.cancel(true)); + checkCompletedWithWrappedCancellationException(g); + + f = new CompletableFuture<>(); assertTrue(f.cancel(true)); + g = f.thenRun(r = new Noop()); checkCompletedWithWrappedCancellationException(g); } @@ -546,7 +576,7 @@ public class CompletableFutureTest exten * thenApply result completes normally after normal completion of source */ public void testThenApply() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApply(inc); f.complete(one); checkCompletedNormally(g, two); @@ -557,7 +587,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenApply2() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApply(inc); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); @@ -567,7 +597,7 @@ public class CompletableFutureTest exten * thenApply result completes exceptionally if action does */ public void testThenApply3() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApply(new FailingFunction()); f.complete(one); checkCompletedWithWrappedCFException(g); @@ -577,7 +607,7 @@ public class CompletableFutureTest exten * thenApply result completes exceptionally if source cancelled */ public void testThenApply4() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApply(inc); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); @@ -587,7 +617,7 @@ public class CompletableFutureTest exten * thenAccept result completes normally after normal completion of source */ public void testThenAccept() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAccept(r); f.complete(one); @@ -600,7 +630,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenAccept2() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAccept(r); f.completeExceptionally(new CFException()); @@ -611,7 +641,7 @@ public class CompletableFutureTest exten * thenAccept result completes exceptionally if action does */ public void testThenAccept3() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingConsumer r = new FailingConsumer(); CompletableFuture g = f.thenAccept(r); f.complete(one); @@ -623,7 +653,7 @@ public class CompletableFutureTest exten * thenAccept result completes exceptionally if source cancelled */ public void testThenAccept4() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAccept(r); assertTrue(f.cancel(true)); @@ -638,24 +668,24 @@ public class CompletableFutureTest exten public void testThenCombine() { CompletableFuture f, g, h; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombine(g, subtract); f.complete(3); checkIncomplete(h); g.complete(1); checkCompletedNormally(h, 2); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombine(g, subtract); g.complete(1); checkIncomplete(h); f.complete(3); checkCompletedNormally(h, 2); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); g.complete(1); f.complete(3); h = f.thenCombine(g, subtract); @@ -669,31 +699,31 @@ public class CompletableFutureTest exten public void testThenCombine2() { CompletableFuture f, g, h; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombine(g, subtract); f.completeExceptionally(new CFException()); checkIncomplete(h); g.complete(1); checkCompletedWithWrappedCFException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombine(g, subtract); g.completeExceptionally(new CFException()); checkIncomplete(h); f.complete(3); checkCompletedWithWrappedCFException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); f.complete(3); g.completeExceptionally(new CFException()); h = f.thenCombine(g, subtract); checkCompletedWithWrappedCFException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); f.completeExceptionally(new CFException()); g.complete(3); h = f.thenCombine(g, subtract); @@ -704,8 +734,8 @@ public class CompletableFutureTest exten * thenCombine result completes exceptionally if action does */ public void testThenCombine3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingBiFunction r = new FailingBiFunction(); CompletableFuture g = f.thenCombine(f2, r); f.complete(one); @@ -722,24 +752,24 @@ public class CompletableFutureTest exten public void testThenCombine4() { CompletableFuture f, g, h; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombine(g, subtract); assertTrue(f.cancel(true)); checkIncomplete(h); g.complete(1); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombine(g, subtract); assertTrue(g.cancel(true)); checkIncomplete(h); f.complete(3); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); assertTrue(f.cancel(true)); assertTrue(g.cancel(true)); h = f.thenCombine(g, subtract); @@ -751,25 +781,35 @@ public class CompletableFutureTest exten * completion of sources */ public void testThenAcceptBoth() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBoth(f2, r); - f.complete(one); - checkIncomplete(g); - f2.complete(two); - checkCompletedNormally(g, null); - assertEquals(r.value, 3); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; - r = new AddAction(); - f = new CompletableFuture(); - f.complete(one); - f2 = new CompletableFuture(); - g = f.thenAcceptBoth(f2, r); - checkIncomplete(g); - f2.complete(two); - checkCompletedNormally(g, null); - assertEquals(r.value, 3); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + f.complete(3); + checkIncomplete(h); + g.complete(1); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + g.complete(1); + checkIncomplete(h); + f.complete(3); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + g.complete(1); + f.complete(3); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); } /** @@ -777,55 +817,102 @@ public class CompletableFutureTest exten * completion of either source */ public void testThenAcceptBoth2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBoth(f2, r); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBoth(g, r = new SubtractAction()); f.completeExceptionally(new CFException()); - f2.complete(two); - checkCompletedWithWrappedCFException(g); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCFException(h); - r = new AddAction(); - f = new CompletableFuture(); - f.complete(one); - f2 = new CompletableFuture(); - g = f.thenAcceptBoth(f2, r); - f2.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + g.completeExceptionally(new CFException()); + checkIncomplete(h); + f.complete(3); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + g.completeExceptionally(new CFException()); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.completeExceptionally(new CFException()); + g.complete(3); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + checkCompletedWithWrappedCFException(h); } /** * thenAcceptBoth result completes exceptionally if action does */ public void testThenAcceptBoth3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - FailingBiConsumer r = new FailingBiConsumer(); - CompletableFuture g = f.thenAcceptBoth(f2, r); - f.complete(one); - checkIncomplete(g); - f2.complete(two); - checkCompletedWithWrappedCFException(g); + CompletableFuture f, g; + CompletableFuture h; + FailingBiConsumer r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBoth(g, r = new FailingBiConsumer()); + f.complete(3); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + g.complete(1); + h = f.thenAcceptBoth(g, r = new FailingBiConsumer()); + checkCompletedWithWrappedCFException(h); } /** * thenAcceptBoth result completes exceptionally if either source cancelled */ public void testThenAcceptBoth4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBoth(f2, r); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBoth(g, r = new SubtractAction()); assertTrue(f.cancel(true)); - f2.complete(two); - checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); - r = new AddAction(); - g = f.thenAcceptBoth(f2, r); - f.complete(one); - assertTrue(f2.cancel(true)); - checkCompletedWithWrappedCancellationException(g); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCancellationException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + assertTrue(g.cancel(true)); + checkIncomplete(h); + f.complete(3); + checkCompletedWithWrappedCancellationException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + assertTrue(g.cancel(true)); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + checkCompletedWithWrappedCancellationException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + assertTrue(f.cancel(true)); + g.complete(3); + h = f.thenAcceptBoth(g, r = new SubtractAction()); + checkCompletedWithWrappedCancellationException(h); } /** @@ -833,24 +920,34 @@ public class CompletableFutureTest exten * completion of sources */ public void testRunAfterBoth() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - Noop r = new Noop(); - CompletableFuture g = f.runAfterBoth(f2, r); - f.complete(one); - checkIncomplete(g); - f2.complete(two); - checkCompletedNormally(g, null); + CompletableFuture f, g; + CompletableFuture h; + Noop r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.runAfterBoth(g, r = new Noop()); + f.complete(3); + checkIncomplete(h); + g.complete(1); + checkCompletedNormally(h, null); assertTrue(r.ran); - r = new Noop(); - f = new CompletableFuture(); - f.complete(one); - f2 = new CompletableFuture(); - g = f.runAfterBoth(f2, r); - checkIncomplete(g); - f2.complete(two); - checkCompletedNormally(g, null); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.runAfterBoth(g, r = new Noop()); + g.complete(1); + checkIncomplete(h); + f.complete(3); + checkCompletedNormally(h, null); + assertTrue(r.ran); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + g.complete(1); + f.complete(3); + h = f.runAfterBoth(g, r = new Noop()); + checkCompletedNormally(h, null); assertTrue(r.ran); } @@ -859,29 +956,51 @@ public class CompletableFutureTest exten * completion of either source */ public void testRunAfterBoth2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - Noop r = new Noop(); - CompletableFuture g = f.runAfterBoth(f2, r); + CompletableFuture f, g; + CompletableFuture h; + Noop r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.runAfterBoth(g, r = new Noop()); f.completeExceptionally(new CFException()); - f2.complete(two); - checkCompletedWithWrappedCFException(g); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCFException(h); + assertFalse(r.ran); - r = new Noop(); - f = new CompletableFuture(); - f.complete(one); - f2 = new CompletableFuture(); - g = f.runAfterBoth(f2, r); - f2.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.runAfterBoth(g, r = new Noop()); + g.completeExceptionally(new CFException()); + checkIncomplete(h); + f.complete(3); + checkCompletedWithWrappedCFException(h); + assertFalse(r.ran); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + g.completeExceptionally(new CFException()); + f.complete(3); + h = f.runAfterBoth(g, r = new Noop()); + checkCompletedWithWrappedCFException(h); + assertFalse(r.ran); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.completeExceptionally(new CFException()); + g.complete(1); + h = f.runAfterBoth(g, r = new Noop()); + checkCompletedWithWrappedCFException(h); + assertFalse(r.ran); } /** * runAfterBoth result completes exceptionally if action does */ public void testRunAfterBoth3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.runAfterBoth(f2, r); f.complete(one); @@ -894,15 +1013,15 @@ public class CompletableFutureTest exten * runAfterBoth result completes exceptionally if either source cancelled */ public void testRunAfterBoth4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterBoth(f2, r); assertTrue(f.cancel(true)); f2.complete(two); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); r = new Noop(); g = f.runAfterBoth(f2, r); f.complete(one); @@ -915,17 +1034,17 @@ public class CompletableFutureTest exten * of either source */ public void testApplyToEither() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEither(f2, inc); f.complete(one); checkCompletedNormally(g, two); f2.complete(one); checkCompletedNormally(g, two); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.applyToEither(f2, inc); checkCompletedNormally(g, two); } @@ -935,15 +1054,15 @@ public class CompletableFutureTest exten * completion of either source */ public void testApplyToEither2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEither(f2, inc); f.completeExceptionally(new CFException()); f2.complete(one); checkCompletedWithWrappedCFException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.applyToEither(f2, inc); checkCompletedWithWrappedCFException(g); @@ -953,8 +1072,8 @@ public class CompletableFutureTest exten * applyToEither result completes exceptionally if action does */ public void testApplyToEither3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingFunction r = new FailingFunction(); CompletableFuture g = f.applyToEither(f2, r); f2.complete(two); @@ -965,13 +1084,13 @@ public class CompletableFutureTest exten * applyToEither result completes exceptionally if either source cancelled */ public void testApplyToEither4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEither(f2, inc); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); checkCompletedWithWrappedCancellationException(g); } @@ -981,8 +1100,8 @@ public class CompletableFutureTest exten * of either source */ public void testAcceptEither() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEither(f2, r); f.complete(one); @@ -992,9 +1111,9 @@ public class CompletableFutureTest exten assertEquals(r.value, 2); r = new IncAction(); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.acceptEither(f2, r); checkCompletedNormally(g, null); assertEquals(r.value, 2); @@ -1005,8 +1124,8 @@ public class CompletableFutureTest exten * completion of either source */ public void testAcceptEither2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEither(f2, r); f.completeExceptionally(new CFException()); @@ -1014,8 +1133,8 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g); r = new IncAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.acceptEither(f2, r); checkCompletedWithWrappedCFException(g); @@ -1025,8 +1144,8 @@ public class CompletableFutureTest exten * acceptEither result completes exceptionally if action does */ public void testAcceptEither3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingConsumer r = new FailingConsumer(); CompletableFuture g = f.acceptEither(f2, r); f2.complete(two); @@ -1037,14 +1156,14 @@ public class CompletableFutureTest exten * acceptEither result completes exceptionally if either source cancelled */ public void testAcceptEither4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEither(f2, r); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); checkCompletedWithWrappedCancellationException(g); } @@ -1055,8 +1174,8 @@ public class CompletableFutureTest exten * of either source */ public void testRunAfterEither() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEither(f2, r); f.complete(one); @@ -1066,9 +1185,9 @@ public class CompletableFutureTest exten assertTrue(r.ran); r = new Noop(); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.runAfterEither(f2, r); checkCompletedNormally(g, null); assertTrue(r.ran); @@ -1079,8 +1198,8 @@ public class CompletableFutureTest exten * completion of either source */ public void testRunAfterEither2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEither(f2, r); f.completeExceptionally(new CFException()); @@ -1088,8 +1207,8 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.runAfterEither(f2, r); checkCompletedWithWrappedCFException(g); @@ -1099,8 +1218,8 @@ public class CompletableFutureTest exten * runAfterEither result completes exceptionally if action does */ public void testRunAfterEither3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.runAfterEither(f2, r); f2.complete(two); @@ -1111,14 +1230,14 @@ public class CompletableFutureTest exten * runAfterEither result completes exceptionally if either source cancelled */ public void testRunAfterEither4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEither(f2, r); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); checkCompletedWithWrappedCancellationException(g); } @@ -1130,13 +1249,13 @@ public class CompletableFutureTest exten CompletableFuture f, g; CompletableFutureInc r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenCompose(r = new CompletableFutureInc()); f.complete(one); checkCompletedNormally(g, two); assertTrue(r.ran); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); g = f.thenCompose(r = new CompletableFutureInc()); checkCompletedNormally(g, two); @@ -1151,12 +1270,12 @@ public class CompletableFutureTest exten CompletableFuture f, g; CompletableFutureInc r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenCompose(r = new CompletableFutureInc()); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.completeExceptionally(new CFException()); g = f.thenCompose(r = new CompletableFutureInc()); checkCompletedWithWrappedCFException(g); @@ -1169,12 +1288,12 @@ public class CompletableFutureTest exten CompletableFuture f, g; FailingCompletableFutureFunction r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenCompose(r = new FailingCompletableFutureFunction()); f.complete(one); checkCompletedWithWrappedCFException(g); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); g = f.thenCompose(r = new FailingCompletableFutureFunction()); checkCompletedWithWrappedCFException(g); @@ -1187,12 +1306,12 @@ public class CompletableFutureTest exten CompletableFuture f, g; CompletableFutureInc r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenCompose(r = new CompletableFutureInc()); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); + f = new CompletableFuture<>(); assertTrue(f.cancel(true)); g = f.thenCompose(r = new CompletableFutureInc()); checkCompletedWithWrappedCancellationException(g); @@ -1205,14 +1324,14 @@ public class CompletableFutureTest exten * thenRunAsync result completes normally after normal completion of source */ public void testThenRunAsync() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.thenRunAsync(r); f.complete(null); checkCompletedNormally(g, null); // reordered version - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(null); r = new Noop(); g = f.thenRunAsync(r); @@ -1224,7 +1343,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenRunAsync2() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.thenRunAsync(r); f.completeExceptionally(new CFException()); @@ -1240,7 +1359,7 @@ public class CompletableFutureTest exten * thenRunAsync result completes exceptionally if action does */ public void testThenRunAsync3() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.thenRunAsync(r); f.complete(null); @@ -1251,7 +1370,7 @@ public class CompletableFutureTest exten * thenRunAsync result completes exceptionally if source cancelled */ public void testThenRunAsync4() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.thenRunAsync(r); assertTrue(f.cancel(true)); @@ -1262,7 +1381,7 @@ public class CompletableFutureTest exten * thenApplyAsync result completes normally after normal completion of source */ public void testThenApplyAsync() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApplyAsync(inc); f.complete(one); checkCompletedNormally(g, two); @@ -1273,7 +1392,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenApplyAsync2() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApplyAsync(inc); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); @@ -1283,7 +1402,7 @@ public class CompletableFutureTest exten * thenApplyAsync result completes exceptionally if action does */ public void testThenApplyAsync3() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingFunction r = new FailingFunction(); CompletableFuture g = f.thenApplyAsync(r); f.complete(null); @@ -1294,7 +1413,7 @@ public class CompletableFutureTest exten * thenApplyAsync result completes exceptionally if source cancelled */ public void testThenApplyAsync4() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApplyAsync(inc); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); @@ -1305,7 +1424,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenAcceptAsync() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAcceptAsync(r); f.complete(one); @@ -1318,7 +1437,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenAcceptAsync2() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAcceptAsync(r); f.completeExceptionally(new CFException()); @@ -1329,7 +1448,7 @@ public class CompletableFutureTest exten * thenAcceptAsync result completes exceptionally if action does */ public void testThenAcceptAsync3() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingConsumer r = new FailingConsumer(); CompletableFuture g = f.thenAcceptAsync(r); f.complete(null); @@ -1340,7 +1459,7 @@ public class CompletableFutureTest exten * thenAcceptAsync result completes exceptionally if source cancelled */ public void testThenAcceptAsync4() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAcceptAsync(r); assertTrue(f.cancel(true)); @@ -1354,24 +1473,24 @@ public class CompletableFutureTest exten public void testThenCombineAsync() { CompletableFuture f, g, h; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract); f.complete(3); checkIncomplete(h); g.complete(1); checkCompletedNormally(h, 2); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract); g.complete(1); checkIncomplete(h); f.complete(3); checkCompletedNormally(h, 2); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); g.complete(1); f.complete(3); h = f.thenCombineAsync(g, subtract); @@ -1385,24 +1504,24 @@ public class CompletableFutureTest exten public void testThenCombineAsync2() { CompletableFuture f, g, h; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract); f.completeExceptionally(new CFException()); checkIncomplete(h); g.complete(1); checkCompletedWithWrappedCFException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract); g.completeExceptionally(new CFException()); checkIncomplete(h); f.complete(3); checkCompletedWithWrappedCFException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); g.completeExceptionally(new CFException()); f.complete(3); h = f.thenCombineAsync(g, subtract); @@ -1413,8 +1532,8 @@ public class CompletableFutureTest exten * thenCombineAsync result completes exceptionally if action does */ public void testThenCombineAsync3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingBiFunction r = new FailingBiFunction(); CompletableFuture g = f.thenCombineAsync(f2, r); f.complete(one); @@ -1431,31 +1550,31 @@ public class CompletableFutureTest exten public void testThenCombineAsync4() { CompletableFuture f, g, h; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract); assertTrue(f.cancel(true)); checkIncomplete(h); g.complete(1); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract); assertTrue(g.cancel(true)); checkIncomplete(h); f.complete(3); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); g.complete(3); assertTrue(f.cancel(true)); h = f.thenCombineAsync(g, subtract); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); f.complete(3); assertTrue(g.cancel(true)); h = f.thenCombineAsync(g, subtract); @@ -1467,15 +1586,35 @@ public class CompletableFutureTest exten * completion of sources */ public void testThenAcceptBothAsync() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r); - f.complete(one); - checkIncomplete(g); - f2.complete(two); - checkCompletedNormally(g, null); - assertEquals(r.value, 3); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + f.complete(3); + checkIncomplete(h); + g.complete(1); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + g.complete(1); + checkIncomplete(h); + f.complete(3); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + g.complete(1); + f.complete(3); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); } /** @@ -1483,56 +1622,102 @@ public class CompletableFutureTest exten * completion of source */ public void testThenAcceptBothAsync2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); f.completeExceptionally(new CFException()); - f2.complete(two); - checkCompletedWithWrappedCFException(g); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCFException(h); - r = new AddAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); - g = f.thenAcceptBothAsync(f2, r); - f.complete(one); - f2.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + g.completeExceptionally(new CFException()); + checkIncomplete(h); + f.complete(3); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + g.completeExceptionally(new CFException()); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.completeExceptionally(new CFException()); + g.complete(3); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + checkCompletedWithWrappedCFException(h); } /** * thenAcceptBothAsync result completes exceptionally if action does */ public void testThenAcceptBothAsync3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - FailingBiConsumer r = new FailingBiConsumer(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r); - f.complete(one); - checkIncomplete(g); - f2.complete(two); - checkCompletedWithWrappedCFException(g); + CompletableFuture f, g; + CompletableFuture h; + FailingBiConsumer r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new FailingBiConsumer()); + f.complete(3); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + g.complete(1); + h = f.thenAcceptBothAsync(g, r = new FailingBiConsumer()); + checkCompletedWithWrappedCFException(h); } /** * thenAcceptBothAsync result completes exceptionally if either source cancelled */ public void testThenAcceptBothAsync4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); assertTrue(f.cancel(true)); - f2.complete(two); - checkCompletedWithWrappedCancellationException(g); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCancellationException(h); - r = new AddAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); - g = f.thenAcceptBothAsync(f2, r); - f.complete(one); - assertTrue(f2.cancel(true)); - checkCompletedWithWrappedCancellationException(g); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + assertTrue(g.cancel(true)); + checkIncomplete(h); + f.complete(3); + checkCompletedWithWrappedCancellationException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + assertTrue(g.cancel(true)); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + checkCompletedWithWrappedCancellationException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + assertTrue(f.cancel(true)); + g.complete(3); + h = f.thenAcceptBothAsync(g, r = new SubtractAction()); + checkCompletedWithWrappedCancellationException(h); } /** @@ -1540,8 +1725,8 @@ public class CompletableFutureTest exten * completion of sources */ public void testRunAfterBothAsync() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterBothAsync(f2, r); f.complete(one); @@ -1556,8 +1741,8 @@ public class CompletableFutureTest exten * completion of source */ public void testRunAfterBothAsync2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterBothAsync(f2, r); f.completeExceptionally(new CFException()); @@ -1565,8 +1750,8 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); g = f.runAfterBothAsync(f2, r); f.complete(one); f2.completeExceptionally(new CFException()); @@ -1577,8 +1762,8 @@ public class CompletableFutureTest exten * runAfterBothAsync result completes exceptionally if action does */ public void testRunAfterBothAsync3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.runAfterBothAsync(f2, r); f.complete(one); @@ -1591,8 +1776,8 @@ public class CompletableFutureTest exten * runAfterBothAsync result completes exceptionally if either source cancelled */ public void testRunAfterBothAsync4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterBothAsync(f2, r); assertTrue(f.cancel(true)); @@ -1600,8 +1785,8 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCancellationException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); g = f.runAfterBothAsync(f2, r); f.complete(one); assertTrue(f2.cancel(true)); @@ -1613,15 +1798,15 @@ public class CompletableFutureTest exten * completion of sources */ public void testApplyToEitherAsync() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEitherAsync(f2, inc); f.complete(one); checkCompletedNormally(g, two); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.applyToEitherAsync(f2, inc); checkCompletedNormally(g, two); } @@ -1631,14 +1816,14 @@ public class CompletableFutureTest exten * completion of source */ public void testApplyToEitherAsync2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEitherAsync(f2, inc); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.applyToEitherAsync(f2, inc); f.complete(one); @@ -1649,8 +1834,8 @@ public class CompletableFutureTest exten * applyToEitherAsync result completes exceptionally if action does */ public void testApplyToEitherAsync3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingFunction r = new FailingFunction(); CompletableFuture g = f.applyToEitherAsync(f2, r); f.complete(one); @@ -1661,14 +1846,14 @@ public class CompletableFutureTest exten * applyToEitherAsync result completes exceptionally if either source cancelled */ public void testApplyToEitherAsync4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEitherAsync(f2, inc); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); g = f.applyToEitherAsync(f2, inc); checkCompletedWithWrappedCancellationException(g); @@ -1679,8 +1864,8 @@ public class CompletableFutureTest exten * completion of sources */ public void testAcceptEitherAsync() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEitherAsync(f2, r); f.complete(one); @@ -1688,9 +1873,9 @@ public class CompletableFutureTest exten assertEquals(r.value, 2); r = new IncAction(); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.acceptEitherAsync(f2, r); checkCompletedNormally(g, null); assertEquals(r.value, 2); @@ -1701,16 +1886,16 @@ public class CompletableFutureTest exten * completion of source */ public void testAcceptEitherAsync2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEitherAsync(f2, r); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); r = new IncAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.acceptEitherAsync(f2, r); f.complete(one); @@ -1721,8 +1906,8 @@ public class CompletableFutureTest exten * acceptEitherAsync result completes exceptionally if action does */ public void testAcceptEitherAsync3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingConsumer r = new FailingConsumer(); CompletableFuture g = f.acceptEitherAsync(f2, r); f.complete(one); @@ -1734,16 +1919,16 @@ public class CompletableFutureTest exten * source cancelled */ public void testAcceptEitherAsync4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEitherAsync(f2, r); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); r = new IncAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); g = f.acceptEitherAsync(f2, r); checkCompletedWithWrappedCancellationException(g); @@ -1754,8 +1939,8 @@ public class CompletableFutureTest exten * completion of sources */ public void testRunAfterEitherAsync() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEitherAsync(f2, r); f.complete(one); @@ -1763,9 +1948,9 @@ public class CompletableFutureTest exten assertTrue(r.ran); r = new Noop(); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.runAfterEitherAsync(f2, r); checkCompletedNormally(g, null); assertTrue(r.ran); @@ -1776,16 +1961,16 @@ public class CompletableFutureTest exten * completion of source */ public void testRunAfterEitherAsync2() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEitherAsync(f2, r); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.runAfterEitherAsync(f2, r); f.complete(one); @@ -1796,8 +1981,8 @@ public class CompletableFutureTest exten * runAfterEitherAsync result completes exceptionally if action does */ public void testRunAfterEitherAsync3() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.runAfterEitherAsync(f2, r); f.complete(one); @@ -1809,16 +1994,16 @@ public class CompletableFutureTest exten * source cancelled */ public void testRunAfterEitherAsync4() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEitherAsync(f2, r); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); g = f.runAfterEitherAsync(f2, r); checkCompletedWithWrappedCancellationException(g); @@ -1832,12 +2017,12 @@ public class CompletableFutureTest exten CompletableFuture f, g; CompletableFutureInc r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenComposeAsync(r = new CompletableFutureInc()); f.complete(one); checkCompletedNormally(g, two); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); g = f.thenComposeAsync(r = new CompletableFutureInc()); checkCompletedNormally(g, two); @@ -1851,13 +2036,13 @@ public class CompletableFutureTest exten CompletableFuture f, g; CompletableFutureInc r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenComposeAsync(r = new CompletableFutureInc()); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); assertFalse(r.ran); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.completeExceptionally(new CFException()); g = f.thenComposeAsync(r = new CompletableFutureInc()); checkCompletedWithWrappedCFException(g); @@ -1871,12 +2056,12 @@ public class CompletableFutureTest exten CompletableFuture f, g; FailingCompletableFutureFunction r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenComposeAsync(r = new FailingCompletableFutureFunction()); f.complete(one); checkCompletedWithWrappedCFException(g); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); g = f.thenComposeAsync(r = new FailingCompletableFutureFunction()); checkCompletedWithWrappedCFException(g); @@ -1889,12 +2074,12 @@ public class CompletableFutureTest exten CompletableFuture f, g; CompletableFutureInc r; - f = new CompletableFuture(); + f = new CompletableFuture<>(); g = f.thenComposeAsync(r = new CompletableFutureInc()); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); + f = new CompletableFuture<>(); assertTrue(f.cancel(true)); g = f.thenComposeAsync(r = new CompletableFutureInc()); checkCompletedWithWrappedCancellationException(g); @@ -1907,14 +2092,14 @@ public class CompletableFutureTest exten * thenRunAsync result completes normally after normal completion of source */ public void testThenRunAsyncE() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); f.complete(null); checkCompletedNormally(g, null); // reordered version - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(null); r = new Noop(); g = f.thenRunAsync(r, new ThreadExecutor()); @@ -1926,7 +2111,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenRunAsync2E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); f.completeExceptionally(new CFException()); @@ -1942,7 +2127,7 @@ public class CompletableFutureTest exten * thenRunAsync result completes exceptionally if action does */ public void testThenRunAsync3E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); f.complete(null); @@ -1953,7 +2138,7 @@ public class CompletableFutureTest exten * thenRunAsync result completes exceptionally if source cancelled */ public void testThenRunAsync4E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.thenRunAsync(r, new ThreadExecutor()); assertTrue(f.cancel(true)); @@ -1964,7 +2149,7 @@ public class CompletableFutureTest exten * thenApplyAsync result completes normally after normal completion of source */ public void testThenApplyAsyncE() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApplyAsync(inc, new ThreadExecutor()); f.complete(one); checkCompletedNormally(g, two); @@ -1975,7 +2160,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenApplyAsync2E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApplyAsync(inc, new ThreadExecutor()); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); @@ -1985,7 +2170,7 @@ public class CompletableFutureTest exten * thenApplyAsync result completes exceptionally if action does */ public void testThenApplyAsync3E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingFunction r = new FailingFunction(); CompletableFuture g = f.thenApplyAsync(r, new ThreadExecutor()); f.complete(null); @@ -1996,7 +2181,7 @@ public class CompletableFutureTest exten * thenApplyAsync result completes exceptionally if source cancelled */ public void testThenApplyAsync4E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFuture g = f.thenApplyAsync(inc, new ThreadExecutor()); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); @@ -2007,7 +2192,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenAcceptAsyncE() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); f.complete(one); @@ -2020,7 +2205,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenAcceptAsync2E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); f.completeExceptionally(new CFException()); @@ -2031,7 +2216,7 @@ public class CompletableFutureTest exten * thenAcceptAsync result completes exceptionally if action does */ public void testThenAcceptAsync3E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingConsumer r = new FailingConsumer(); CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); f.complete(null); @@ -2042,7 +2227,7 @@ public class CompletableFutureTest exten * thenAcceptAsync result completes exceptionally if source cancelled */ public void testThenAcceptAsync4E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.thenAcceptAsync(r, new ThreadExecutor()); assertTrue(f.cancel(true)); @@ -2058,8 +2243,8 @@ public class CompletableFutureTest exten ThreadExecutor e = new ThreadExecutor(); int count = 0; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract, e); f.complete(3); checkIncomplete(h); @@ -2067,8 +2252,8 @@ public class CompletableFutureTest exten checkCompletedNormally(h, 2); assertEquals(++count, e.count.get()); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract, e); g.complete(1); checkIncomplete(h); @@ -2076,8 +2261,8 @@ public class CompletableFutureTest exten checkCompletedNormally(h, 2); assertEquals(++count, e.count.get()); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); g.complete(1); f.complete(3); h = f.thenCombineAsync(g, subtract, e); @@ -2094,24 +2279,24 @@ public class CompletableFutureTest exten ThreadExecutor e = new ThreadExecutor(); int count = 0; - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract, e); f.completeExceptionally(new CFException()); checkIncomplete(h); g.complete(1); checkCompletedWithWrappedCFException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract, e); g.completeExceptionally(new CFException()); checkIncomplete(h); f.complete(3); checkCompletedWithWrappedCFException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); g.completeExceptionally(new CFException()); h = f.thenCombineAsync(g, subtract, e); checkIncomplete(h); @@ -2125,8 +2310,8 @@ public class CompletableFutureTest exten * thenCombineAsync result completes exceptionally if action does */ public void testThenCombineAsync3E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingBiFunction r = new FailingBiFunction(); CompletableFuture g = f.thenCombineAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2144,32 +2329,32 @@ public class CompletableFutureTest exten CompletableFuture f, g, h; ThreadExecutor e = new ThreadExecutor(); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract, e); assertTrue(f.cancel(true)); checkIncomplete(h); g.complete(1); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); h = f.thenCombineAsync(g, subtract, e); assertTrue(g.cancel(true)); checkIncomplete(h); f.complete(3); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); assertTrue(g.cancel(true)); h = f.thenCombineAsync(g, subtract, e); checkIncomplete(h); f.complete(3); checkCompletedWithWrappedCancellationException(h); - f = new CompletableFuture(); - g = new CompletableFuture(); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); assertTrue(f.cancel(true)); assertTrue(g.cancel(true)); h = f.thenCombineAsync(g, subtract, e); @@ -2183,15 +2368,38 @@ public class CompletableFutureTest exten * completion of sources */ public void testThenAcceptBothAsyncE() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r, new ThreadExecutor()); - f.complete(one); - checkIncomplete(g); - f2.complete(two); - checkCompletedNormally(g, null); - assertEquals(r.value, 3); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + ThreadExecutor e = new ThreadExecutor(); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + f.complete(3); + checkIncomplete(h); + g.complete(1); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + g.complete(1); + checkIncomplete(h); + f.complete(3); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + g.complete(1); + f.complete(3); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + checkCompletedNormally(h, null); + assertEquals(r.value, 2); + + assertEquals(3, e.count.get()); } /** @@ -2199,56 +2407,111 @@ public class CompletableFutureTest exten * completion of source */ public void testThenAcceptBothAsync2E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r, new ThreadExecutor()); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + ThreadExecutor e = new ThreadExecutor(); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); f.completeExceptionally(new CFException()); - f2.complete(two); - checkCompletedWithWrappedCFException(g); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCFException(h); - r = new AddAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); - g = f.thenAcceptBothAsync(f2, r, new ThreadExecutor()); - f.complete(one); - f2.completeExceptionally(new CFException()); - checkCompletedWithWrappedCFException(g); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + g.completeExceptionally(new CFException()); + checkIncomplete(h); + f.complete(3); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + g.completeExceptionally(new CFException()); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.completeExceptionally(new CFException()); + g.complete(3); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + checkCompletedWithWrappedCFException(h); + + assertEquals(0, e.count.get()); } /** * thenAcceptBothAsync result completes exceptionally if action does */ public void testThenAcceptBothAsync3E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - FailingBiConsumer r = new FailingBiConsumer(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r, new ThreadExecutor()); - f.complete(one); - checkIncomplete(g); - f2.complete(two); - checkCompletedWithWrappedCFException(g); + CompletableFuture f, g; + CompletableFuture h; + FailingBiConsumer r; + ThreadExecutor e = new ThreadExecutor(); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new FailingBiConsumer(), e); + f.complete(3); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCFException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + g.complete(1); + h = f.thenAcceptBothAsync(g, r = new FailingBiConsumer(), e); + checkCompletedWithWrappedCFException(h); + + assertEquals(2, e.count.get()); } /** * thenAcceptBothAsync result completes exceptionally if either source cancelled */ public void testThenAcceptBothAsync4E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); - AddAction r = new AddAction(); - CompletableFuture g = f.thenAcceptBothAsync(f2, r, new ThreadExecutor()); + CompletableFuture f, g; + CompletableFuture h; + SubtractAction r; + ThreadExecutor e = new ThreadExecutor(); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); assertTrue(f.cancel(true)); - f2.complete(two); - checkCompletedWithWrappedCancellationException(g); + checkIncomplete(h); + g.complete(1); + checkCompletedWithWrappedCancellationException(h); - r = new AddAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); - g = f.thenAcceptBothAsync(f2, r, new ThreadExecutor()); - f.complete(one); - assertTrue(f2.cancel(true)); - checkCompletedWithWrappedCancellationException(g); + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + assertTrue(g.cancel(true)); + checkIncomplete(h); + f.complete(3); + checkCompletedWithWrappedCancellationException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + f.complete(3); + assertTrue(g.cancel(true)); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + checkCompletedWithWrappedCancellationException(h); + + f = new CompletableFuture<>(); + g = new CompletableFuture<>(); + assertTrue(f.cancel(true)); + g.complete(3); + h = f.thenAcceptBothAsync(g, r = new SubtractAction(), e); + checkCompletedWithWrappedCancellationException(h); + + assertEquals(0, e.count.get()); } /** @@ -2256,8 +2519,8 @@ public class CompletableFutureTest exten * completion of sources */ public void testRunAfterBothAsyncE() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterBothAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2272,8 +2535,8 @@ public class CompletableFutureTest exten * completion of source */ public void testRunAfterBothAsync2E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterBothAsync(f2, r, new ThreadExecutor()); f.completeExceptionally(new CFException()); @@ -2281,8 +2544,8 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCFException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); g = f.runAfterBothAsync(f2, r, new ThreadExecutor()); f.complete(one); f2.completeExceptionally(new CFException()); @@ -2293,8 +2556,8 @@ public class CompletableFutureTest exten * runAfterBothAsync result completes exceptionally if action does */ public void testRunAfterBothAsync3E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.runAfterBothAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2307,8 +2570,8 @@ public class CompletableFutureTest exten * runAfterBothAsync result completes exceptionally if either source cancelled */ public void testRunAfterBothAsync4E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterBothAsync(f2, r, new ThreadExecutor()); assertTrue(f.cancel(true)); @@ -2316,8 +2579,8 @@ public class CompletableFutureTest exten checkCompletedWithWrappedCancellationException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); g = f.runAfterBothAsync(f2, r, new ThreadExecutor()); f.complete(one); assertTrue(f2.cancel(true)); @@ -2329,15 +2592,15 @@ public class CompletableFutureTest exten * completion of sources */ public void testApplyToEitherAsyncE() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEitherAsync(f2, inc, new ThreadExecutor()); f.complete(one); checkCompletedNormally(g, two); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.applyToEitherAsync(f2, inc, new ThreadExecutor()); checkCompletedNormally(g, two); } @@ -2347,14 +2610,14 @@ public class CompletableFutureTest exten * completion of source */ public void testApplyToEitherAsync2E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEitherAsync(f2, inc, new ThreadExecutor()); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.applyToEitherAsync(f2, inc, new ThreadExecutor()); f.complete(one); @@ -2365,8 +2628,8 @@ public class CompletableFutureTest exten * applyToEitherAsync result completes exceptionally if action does */ public void testApplyToEitherAsync3E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingFunction r = new FailingFunction(); CompletableFuture g = f.applyToEitherAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2377,14 +2640,14 @@ public class CompletableFutureTest exten * applyToEitherAsync result completes exceptionally if either source cancelled */ public void testApplyToEitherAsync4E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); CompletableFuture g = f.applyToEitherAsync(f2, inc, new ThreadExecutor()); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); g = f.applyToEitherAsync(f2, inc, new ThreadExecutor()); checkCompletedWithWrappedCancellationException(g); @@ -2395,8 +2658,8 @@ public class CompletableFutureTest exten * completion of sources */ public void testAcceptEitherAsyncE() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEitherAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2404,9 +2667,9 @@ public class CompletableFutureTest exten assertEquals(r.value, 2); r = new IncAction(); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.acceptEitherAsync(f2, r, new ThreadExecutor()); checkCompletedNormally(g, null); assertEquals(r.value, 2); @@ -2417,16 +2680,16 @@ public class CompletableFutureTest exten * completion of source */ public void testAcceptEitherAsync2E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEitherAsync(f2, r, new ThreadExecutor()); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); r = new IncAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.acceptEitherAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2437,8 +2700,8 @@ public class CompletableFutureTest exten * acceptEitherAsync result completes exceptionally if action does */ public void testAcceptEitherAsync3E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingConsumer r = new FailingConsumer(); CompletableFuture g = f.acceptEitherAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2450,16 +2713,16 @@ public class CompletableFutureTest exten * source cancelled */ public void testAcceptEitherAsync4E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); IncAction r = new IncAction(); CompletableFuture g = f.acceptEitherAsync(f2, r, new ThreadExecutor()); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); r = new IncAction(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); g = f.acceptEitherAsync(f2, r, new ThreadExecutor()); checkCompletedWithWrappedCancellationException(g); @@ -2470,8 +2733,8 @@ public class CompletableFutureTest exten * completion of sources */ public void testRunAfterEitherAsyncE() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEitherAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2479,9 +2742,9 @@ public class CompletableFutureTest exten assertTrue(r.ran); r = new Noop(); - f = new CompletableFuture(); + f = new CompletableFuture<>(); f.complete(one); - f2 = new CompletableFuture(); + f2 = new CompletableFuture<>(); g = f.runAfterEitherAsync(f2, r, new ThreadExecutor()); checkCompletedNormally(g, null); assertTrue(r.ran); @@ -2492,16 +2755,16 @@ public class CompletableFutureTest exten * completion of source */ public void testRunAfterEitherAsync2E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEitherAsync(f2, r, new ThreadExecutor()); f.completeExceptionally(new CFException()); checkCompletedWithWrappedCFException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); f2.completeExceptionally(new CFException()); g = f.runAfterEitherAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2512,8 +2775,8 @@ public class CompletableFutureTest exten * runAfterEitherAsync result completes exceptionally if action does */ public void testRunAfterEitherAsync3E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); FailingNoop r = new FailingNoop(); CompletableFuture g = f.runAfterEitherAsync(f2, r, new ThreadExecutor()); f.complete(one); @@ -2525,16 +2788,16 @@ public class CompletableFutureTest exten * source cancelled */ public void testRunAfterEitherAsync4E() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture f2 = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture f2 = new CompletableFuture<>(); Noop r = new Noop(); CompletableFuture g = f.runAfterEitherAsync(f2, r, new ThreadExecutor()); assertTrue(f.cancel(true)); checkCompletedWithWrappedCancellationException(g); r = new Noop(); - f = new CompletableFuture(); - f2 = new CompletableFuture(); + f = new CompletableFuture<>(); + f2 = new CompletableFuture<>(); assertTrue(f2.cancel(true)); g = f.runAfterEitherAsync(f2, r, new ThreadExecutor()); checkCompletedWithWrappedCancellationException(g); @@ -2545,7 +2808,7 @@ public class CompletableFutureTest exten * completion of source */ public void testThenComposeAsyncE() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFutureInc r = new CompletableFutureInc(); CompletableFuture g = f.thenComposeAsync(r, new ThreadExecutor()); f.complete(one); @@ -2557,7 +2820,7 @@ public class CompletableFutureTest exten * exceptional completion of source */ public void testThenComposeAsync2E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFutureInc r = new CompletableFutureInc(); CompletableFuture g = f.thenComposeAsync(r, new ThreadExecutor()); f.completeExceptionally(new CFException()); @@ -2568,7 +2831,7 @@ public class CompletableFutureTest exten * thenComposeAsync result completes exceptionally if action does */ public void testThenComposeAsync3E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); FailingCompletableFutureFunction r = new FailingCompletableFutureFunction(); CompletableFuture g = f.thenComposeAsync(r, new ThreadExecutor()); f.complete(one); @@ -2579,7 +2842,7 @@ public class CompletableFutureTest exten * thenComposeAsync result completes exceptionally if source cancelled */ public void testThenComposeAsync4E() { - CompletableFuture f = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); CompletableFutureInc r = new CompletableFutureInc(); CompletableFuture g = f.thenComposeAsync(r, new ThreadExecutor()); assertTrue(f.cancel(true)); @@ -2593,7 +2856,7 @@ public class CompletableFutureTest exten * with the value null */ public void testAllOf_empty() throws Exception { - CompletableFuture f = CompletableFuture.allOf(); + CompletableFuture f = CompletableFuture.allOf(); checkCompletedNormally(f, null); } @@ -2602,15 +2865,17 @@ public class CompletableFutureTest exten */ public void testAllOf() throws Exception { for (int k = 1; k < 20; ++k) { - CompletableFuture[] fs = new CompletableFuture[k]; + CompletableFuture[] fs = (CompletableFuture[]) new CompletableFuture[k]; for (int i = 0; i < k; ++i) - fs[i] = new CompletableFuture(); + fs[i] = new CompletableFuture<>(); CompletableFuture f = CompletableFuture.allOf(fs); for (int i = 0; i < k; ++i) { checkIncomplete(f); + checkIncomplete(CompletableFuture.allOf(fs)); fs[i].complete(one); } checkCompletedNormally(f, null); + checkCompletedNormally(CompletableFuture.allOf(fs), null); } } @@ -2618,23 +2883,42 @@ public class CompletableFutureTest exten * anyOf(no component futures) returns an incomplete future */ public void testAnyOf_empty() throws Exception { - CompletableFuture f = CompletableFuture.anyOf(); + CompletableFuture f = CompletableFuture.anyOf(); checkIncomplete(f); } /** * anyOf returns a future completed when any components complete */ - public void testAnyOf() throws Exception { - for (int k = 1; k < 20; ++k) { + public void testAnyOf_normal() throws Exception { + for (int k = 0; k < 10; ++k) { CompletableFuture[] fs = new CompletableFuture[k]; for (int i = 0; i < k; ++i) - fs[i] = new CompletableFuture(); + fs[i] = new CompletableFuture<>(); CompletableFuture f = CompletableFuture.anyOf(fs); checkIncomplete(f); for (int i = 0; i < k; ++i) { fs[i].complete(one); checkCompletedNormally(f, one); + checkCompletedNormally(CompletableFuture.anyOf(fs), one); + } + } + } + + /** + * anyOf result completes exceptionally when any component does. + */ + public void testAnyOf_exceptional() throws Exception { + for (int k = 0; k < 10; ++k) { + CompletableFuture[] fs = new CompletableFuture[k]; + for (int i = 0; i < k; ++i) + fs[i] = new CompletableFuture<>(); + CompletableFuture f = CompletableFuture.anyOf(fs); + checkIncomplete(f); + for (int i = 0; i < k; ++i) { + fs[i].completeExceptionally(new CFException()); + checkCompletedWithWrappedCFException(f); + checkCompletedWithWrappedCFException(CompletableFuture.anyOf(fs)); } } } @@ -2643,8 +2927,8 @@ public class CompletableFutureTest exten * Completion methods throw NullPointerException with null arguments */ public void testNPE() { - CompletableFuture f = new CompletableFuture(); - CompletableFuture g = new CompletableFuture(); + CompletableFuture f = new CompletableFuture<>(); + CompletableFuture g = new CompletableFuture<>(); CompletableFuture nullFuture = (CompletableFuture)null; CompletableFuture h; ThreadExecutor exec = new ThreadExecutor();