package com.linkedin.parseq; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.fail; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import org.testng.annotations.Test; import com.linkedin.parseq.promise.Promises; import com.linkedin.parseq.promise.SettablePromise; /** * @author Jaroslaw Odzga (jodzga@linkedin.com) */ public class TestTaskFactoryMethods extends BaseEngineTest { @Test public void testAction() { final AtomicReference<String> variable = new AtomicReference<String>(); Task<Void> task = Task.action(() -> variable.set("value")); runAndWait("TestTaskFactoryMethods.testAction", task); assertEquals(variable.get(), "value"); assertEquals(countTasks(task.getTrace()), 1); } @Test public void testValue() { Task<String> task = Task.value("value"); runAndWait("TestTaskFactoryMethods.testValue", task); assertEquals(task.get(), "value"); assertEquals(countTasks(task.getTrace()), 1); } @Test public void testFailure() { Exception e = new Exception("ups!"); Task<Integer> task = Task.failure(e); try { runAndWait("TestTaskFactoryMethods.testFailure", task); fail("should have failed"); } catch (Exception ex) { assertEquals(task.getError(), e); } assertEquals(countTasks(task.getTrace()), 1); } @Test public void testCallable() { Task<UUID> task = Task.callable(UUID::randomUUID); runAndWait("TestTaskFactoryMethods.testCallable", task); assertNotNull(task.get()); assertEquals(countTasks(task.getTrace()), 1); } @Test public void testAsync() { final SettablePromise<String> promise = Promises.settable(); Task<String> task = Task.async(() -> promise); getScheduler().schedule(() -> promise.done("done"), 10, TimeUnit.MILLISECONDS); String value = runAndWait("TestTaskFactoryMethods.testAsync", task); assertEquals(value, "done"); assertEquals(countTasks(task.getTrace()), 1); } @Test public void testAsyncWithContext() { final Task<String> t = Task.callable(() -> "done"); Task<String> task = Task.async(ctx -> { ctx.run(t); return t; }); String value = runAndWait("TestTaskFactoryMethods.testAsyncWithContext", task); assertEquals(value, "done"); assertEquals(countTasks(task.getTrace()), 2); } @Test public void testBlocking() { TestingExecutorService es = new TestingExecutorService(Executors.newSingleThreadExecutor()); try { Task<String> task = Task.blocking(() -> "from blocking", es); runAndWait("TestTaskFactoryMethods.testBlocking", task); assertEquals(task.get(), "from blocking"); assertEquals(es.getCount(), 1); assertEquals(countTasks(task.getTrace()), 1); } finally { es.shutdown(); } } @Test public void testPar2AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2)).andThen((a, b) -> value.set(a + b)); runAndWait("TestTaskFactoryMethods.testPar2AndThen", task); assertEquals(value.get(), 1 + 2); assertEquals(countTasks(task.getTrace()), 2 + 1 + 2); } @Test public void testPar3AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3)).andThen((a, b, c) -> value.set(a + b + c)); runAndWait("TestTaskFactoryMethods.testPar3AndThen", task); assertEquals(value.get(), 1 + 2 + 3); assertEquals(countTasks(task.getTrace()), 2 + 1 + 3); } @Test public void testPar4AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4)).andThen((a, b, c, d) -> value.set(a + b + c + d)); runAndWait("TestTaskFactoryMethods.testPar4AndThen", task); assertEquals(value.get(), 1 + 2 + 3 + 4); assertEquals(countTasks(task.getTrace()), 2 + 1 + 4); } @Test public void testPar5AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5)).andThen((a, b, c, d, e) -> value.set(a + b + c + d + e)); runAndWait("TestTaskFactoryMethods.testPar5AndThen", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5); assertEquals(countTasks(task.getTrace()), 2 + 1 + 5); } @Test public void testPar6AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6)) .andThen((a, b, c, d, e, f) -> value.set(a + b + c + d + e + f)); runAndWait("TestTaskFactoryMethods.testPar6AndThen", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6); assertEquals(countTasks(task.getTrace()), 2 + 1 + 6); } @Test public void testPar7AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7)) .andThen((a, b, c, d, e, f, g) -> value.set(a + b + c + d + e + f + g)); runAndWait("TestTaskFactoryMethods.testPar7AndThen", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7); assertEquals(countTasks(task.getTrace()), 2 + 1 + 7); } @Test public void testPar8AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8)) .andThen((a, b, c, d, e, f, g, h) -> value.set(a + b + c + d + e + f + g + h)); runAndWait("TestTaskFactoryMethods.testPar8AndThen", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8); assertEquals(countTasks(task.getTrace()), 2 + 1 + 8); } @Test public void testPar9AndThen() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8), Task.value(9)) .andThen((a, b, c, d, e, f, g, h, i) -> value.set(a + b + c + d + e + f + g + h + i)); runAndWait("TestTaskFactoryMethods.testPar9AndThen", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); assertEquals(countTasks(task.getTrace()), 2 + 1 + 9); } @Test public void testPar2AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2)).andThen("test", (a, b) -> value.set(a + b)); runAndWait("TestTaskFactoryMethods.testPar2AndThenDsc", task); assertEquals(value.get(), 1 + 2); assertEquals(countTasks(task.getTrace()), 2 + 1 + 2); } @Test public void testPar3AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3)).andThen("test", (a, b, c) -> value.set(a + b + c)); runAndWait("TestTaskFactoryMethods.testPar3AndThenDsc", task); assertEquals(value.get(), 1 + 2 + 3); assertEquals(countTasks(task.getTrace()), 2 + 1 + 3); } @Test public void testPar4AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4)).andThen("test", (a, b, c, d) -> value.set(a + b + c + d)); runAndWait("TestTaskFactoryMethods.testPar4AndThenDsc", task); assertEquals(value.get(), 1 + 2 + 3 + 4); assertEquals(countTasks(task.getTrace()), 2 + 1 + 4); } @Test public void testPar5AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5)).andThen("test", (a, b, c, d, e) -> value.set(a + b + c + d + e)); runAndWait("TestTaskFactoryMethods.testPar5AndThenDsc", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5); assertEquals(countTasks(task.getTrace()), 2 + 1 + 5); } @Test public void testPar6AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6)) .andThen("test", (a, b, c, d, e, f) -> value.set(a + b + c + d + e + f)); runAndWait("TestTaskFactoryMethods.testPar6AndThenDsc", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6); assertEquals(countTasks(task.getTrace()), 2 + 1 + 6); } @Test public void testPar7AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7)) .andThen("test", (a, b, c, d, e, f, g) -> value.set(a + b + c + d + e + f + g)); runAndWait("TestTaskFactoryMethods.testPar7AndThenDsc", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7); assertEquals(countTasks(task.getTrace()), 2 + 1 + 7); } @Test public void testPar8AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8)) .andThen("test", (a, b, c, d, e, f, g, h) -> value.set(a + b + c + d + e + f + g + h)); runAndWait("TestTaskFactoryMethods.testPar8AndThenDsc", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8); assertEquals(countTasks(task.getTrace()), 2 + 1 + 8); } @Test public void testPar9AndThenDsc() { AtomicInteger value = new AtomicInteger(); Task<?> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8), Task.value(9)) .andThen("test", (a, b, c, d, e, f, g, h, i) -> value.set(a + b + c + d + e + f + g + h + i)); runAndWait("TestTaskFactoryMethods.testPar9AndThenDsc", task); assertEquals(value.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); assertEquals(countTasks(task.getTrace()), 2 + 1 + 9); } @Test public void testPar2() { Task<Integer> task = Task.par(Task.value(1), Task.value(2)).map((a, b) -> a + b); runAndWait("TestTaskFactoryMethods.testPar2", task); assertEquals((int)task.get(), 1 + 2); assertEquals(countTasks(task.getTrace()), 2 + 1 + 2); } @Test public void testPar3() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3)).map((a, b, c) -> a + b + c); runAndWait("TestTaskFactoryMethods.testPar3", task); assertEquals((int)task.get(), 1 + 2 + 3); assertEquals(countTasks(task.getTrace()), 2 + 1 + 3); } @Test public void testPar4() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4)) .map((a, b, c, d) -> a + b + c + d); runAndWait("TestTaskFactoryMethods.testPar4", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4); assertEquals(countTasks(task.getTrace()), 2 + 1 + 4); } @Test public void testPar5() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5)) .map((a, b, c, d, e) -> a + b + c + d + e); runAndWait("TestTaskFactoryMethods.testPar5", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5); assertEquals(countTasks(task.getTrace()), 2 + 1 + 5); } @Test public void testPar6() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6)) .map((a, b, c, d, e, f) -> a + b + c + d + e + f); runAndWait("TestTaskFactoryMethods.testPar6", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6); assertEquals(countTasks(task.getTrace()), 2 + 1 + 6); } @Test public void testPar7() { Task<Integer> task = Task .par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7)) .map((a, b, c, d, e, f, g) -> a + b + c + d + e + f + g); runAndWait("TestTaskFactoryMethods.testPar7", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7); assertEquals(countTasks(task.getTrace()), 2 + 1 + 7); } @Test public void testPar8() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8)) .map((a, b, c, d, e, f, g, h) -> a + b + c + d + e + f + g + h); runAndWait("TestTaskFactoryMethods.testPar8", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8); assertEquals(countTasks(task.getTrace()), 2 + 1 + 8); } @Test public void testPar9() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8), Task.value(9)) .map((a, b, c, d, e, f, g, h, i) -> a + b + c + d + e + f + g + h + i); runAndWait("TestTaskFactoryMethods.testPar9", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); assertEquals(countTasks(task.getTrace()), 2 + 1 + 9); } @Test public void testPar2Dsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2)).map("test", (a, b) -> a + b); runAndWait("TestTaskFactoryMethods.testPar2Dsc", task); assertEquals((int)task.get(), 1 + 2); assertEquals(countTasks(task.getTrace()), 2 + 1 + 2); } @Test public void testPar3Dsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3)).map("test", (a, b, c) -> a + b + c); runAndWait("TestTaskFactoryMethods.testPar3Dsc", task); assertEquals((int)task.get(), 1 + 2 + 3); assertEquals(countTasks(task.getTrace()), 2 + 1 + 3); } @Test public void testPar4Dsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4)) .map("test", (a, b, c, d) -> a + b + c + d); runAndWait("TestTaskFactoryMethods.testPar4Dsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4); assertEquals(countTasks(task.getTrace()), 2 + 1 + 4); } @Test public void testPar5Dsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5)) .map("test", (a, b, c, d, e) -> a + b + c + d + e); runAndWait("TestTaskFactoryMethods.testPar5Dsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5); assertEquals(countTasks(task.getTrace()), 2 + 1 + 5); } @Test public void testPar6Dsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6)) .map("test", (a, b, c, d, e, f) -> a + b + c + d + e + f); runAndWait("TestTaskFactoryMethods.testPar6Dsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6); assertEquals(countTasks(task.getTrace()), 2 + 1 + 6); } @Test public void testPar7Dsc() { Task<Integer> task = Task .par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7)) .map("test", (a, b, c, d, e, f, g) -> a + b + c + d + e + f + g); runAndWait("TestTaskFactoryMethods.testPar7Dsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7); assertEquals(countTasks(task.getTrace()), 2 + 1 + 7); } @Test public void testPar8Dsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8)) .map("test", (a, b, c, d, e, f, g, h) -> a + b + c + d + e + f + g + h); runAndWait("TestTaskFactoryMethods.testPar8Dsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8); assertEquals(countTasks(task.getTrace()), 2 + 1 + 8); } @Test public void testPar9Dsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8), Task.value(9)) .map("test", (a, b, c, d, e, f, g, h, i) -> a + b + c + d + e + f + g + h + i); runAndWait("TestTaskFactoryMethods.testPar9Dsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); assertEquals(countTasks(task.getTrace()), 2 + 1 + 9); } @Test public void testPar2FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2)).flatMap((a, b) -> Task.value(a + b)); runAndWait("TestTaskFactoryMethods.testPar2FlatMap", task); assertEquals((int)task.get(), 1 + 2); assertEquals(countTasks(task.getTrace()), 2 + 3 + 2); } @Test public void testPar3FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3)).flatMap((a, b, c) -> Task.value(a + b + c)); runAndWait("TestTaskFactoryMethods.testPar3FlatMap", task); assertEquals((int)task.get(), 1 + 2 + 3); assertEquals(countTasks(task.getTrace()), 2 + 3 + 3); } @Test public void testPar4FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4)).flatMap((a, b, c, d) -> Task.value(a + b + c + d)); runAndWait("TestTaskFactoryMethods.testPar4FlatMap", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4); assertEquals(countTasks(task.getTrace()), 2 + 3 + 4); } @Test public void testPar5FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5)) .flatMap((a, b, c, d, e) -> Task.value(a + b + c + d + e)); runAndWait("TestTaskFactoryMethods.testPar5FlatMap", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5); assertEquals(countTasks(task.getTrace()), 2 + 3 + 5); } @Test public void testPar6FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6)) .flatMap((a, b, c, d, e, f) -> Task.value(a + b + c + d + e + f)); runAndWait("TestTaskFactoryMethods.testPar6FlatMap", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6); assertEquals(countTasks(task.getTrace()), 2 + 3 + 6); } @Test public void testPar7FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7)) .flatMap((a, b, c, d, e, f, g) -> Task.value(a + b + c + d + e + f + g)); runAndWait("TestTaskFactoryMethods.testPar7FlatMap", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7); assertEquals(countTasks(task.getTrace()), 2 + 3 + 7); } @Test public void testPar8FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8)) .flatMap((a, b, c, d, e, f, g, h) -> Task.value(a + b + c + d + e + f + g + h)); runAndWait("TestTaskFactoryMethods.testPar8FlatMap", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8); assertEquals(countTasks(task.getTrace()), 2 + 3 + 8); } @Test public void testPar9FlatMap() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8), Task.value(9)) .flatMap((a, b, c, d, e, f, g, h, i) -> Task.value(a + b + c + d + e + f + g + h + i)); runAndWait("TestTaskFactoryMethods.testPar9FlatMap", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); assertEquals(countTasks(task.getTrace()), 2 + 3 + 9); } @Test public void testPar2FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2)).flatMap("test", (a, b) -> Task.value(a + b)); runAndWait("TestTaskFactoryMethods.testPar2FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2); assertEquals(countTasks(task.getTrace()), 2 + 3 + 2); } @Test public void testPar3FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3)).flatMap("test", (a, b, c) -> Task.value(a + b + c)); runAndWait("TestTaskFactoryMethods.testPar3FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2 + 3); assertEquals(countTasks(task.getTrace()), 2 + 3 + 3); } @Test public void testPar4FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4)).flatMap("test", (a, b, c, d) -> Task.value(a + b + c + d)); runAndWait("TestTaskFactoryMethods.testPar4FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4); assertEquals(countTasks(task.getTrace()), 2 + 3 + 4); } @Test public void testPar5FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5)) .flatMap("test", (a, b, c, d, e) -> Task.value(a + b + c + d + e)); runAndWait("TestTaskFactoryMethods.testPar5FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5); assertEquals(countTasks(task.getTrace()), 2 + 3 + 5); } @Test public void testPar6FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6)) .flatMap("test", (a, b, c, d, e, f) -> Task.value(a + b + c + d + e + f)); runAndWait("TestTaskFactoryMethods.testPar6FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6); assertEquals(countTasks(task.getTrace()), 2 + 3 + 6); } @Test public void testPar7FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7)) .flatMap("test", (a, b, c, d, e, f, g) -> Task.value(a + b + c + d + e + f + g)); runAndWait("TestTaskFactoryMethods.testPar7FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7); assertEquals(countTasks(task.getTrace()), 2 + 3 + 7); } @Test public void testPar8FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8)) .flatMap("test", (a, b, c, d, e, f, g, h) -> Task.value(a + b + c + d + e + f + g + h)); runAndWait("TestTaskFactoryMethods.testPar8FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8); assertEquals(countTasks(task.getTrace()), 2 + 3 + 8); } @Test public void testPar9FlatMapDsc() { Task<Integer> task = Task.par(Task.value(1), Task.value(2), Task.value(3), Task.value(4), Task.value(5), Task.value(6), Task.value(7), Task.value(8), Task.value(9)) .flatMap("test", (a, b, c, d, e, f, g, h, i) -> Task.value(a + b + c + d + e + f + g + h + i)); runAndWait("TestTaskFactoryMethods.testPar9FlatMapDsc", task); assertEquals((int)task.get(), 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9); assertEquals(countTasks(task.getTrace()), 2 + 3 + 9); } @Test public void testPar() { List<Task<Integer>> tasks = new ArrayList<Task<Integer>>(); tasks.add(Task.value(1)); tasks.add(Task.value(2)); tasks.add(Task.value(3)); ParTask<Integer> task = Task.par(tasks); runAndWait("TestTaskFactoryMethods.testPar", task); assertEquals(task.get().stream().mapToInt(Integer::intValue).sum(), 1 + 2 + 3); assertEquals(countTasks(task.getTrace()), 3 + 1); } @Test public void testParEmpty() { List<Task<Integer>> tasks = Collections.emptyList(); ParTask<Integer> task = Task.par(tasks); runAndWait("TestTaskFactoryMethods.testParEmpty", task); assertEquals(task.get().stream().mapToInt(Integer::intValue).sum(), 0); assertEquals(countTasks(task.getTrace()), 1); } }