package io.trane.future; import static org.junit.Assert.assertEquals; import java.time.Duration; import org.junit.Test; public class WaitQueueTest { private <T> T get(Future<T> future) throws CheckedFutureException { return future.get(Duration.ZERO); } private <T> Continuation<T, T> newContinuation() { return new Continuation<T, T>() { @Override Future<T> apply(Future<T> result) { return result; } }; } @Test public void addAndFlush1() throws CheckedFutureException { Continuation<Integer, Integer> c = newContinuation(); c.flush(Future.value(1)); assertEquals(new Integer(1), get(c)); } @Test public void addAndFlush2() throws CheckedFutureException { Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); c1.add(c2).flush(Future.value(1)); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); } @Test public void addAndFlush3() throws CheckedFutureException { Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); c1.add(c2).add(c3).flush(Future.value(1)); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); } @Test public void addAndFlush4() throws CheckedFutureException { Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); Continuation<Integer, Integer> c4 = newContinuation(); c1.add(c2).add(c3).add(c4).flush(Future.value(1)); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); assertEquals(new Integer(1), get(c4)); } @Test public void addAndFlush5() throws CheckedFutureException { Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); Continuation<Integer, Integer> c4 = newContinuation(); Continuation<Integer, Integer> c5 = newContinuation(); c1.add(c2).add(c3).add(c4).add(c5).flush(Future.value(1)); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); assertEquals(new Integer(1), get(c4)); assertEquals(new Integer(1), get(c5)); } @Test public void addAndFlush6() throws CheckedFutureException { Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); Continuation<Integer, Integer> c4 = newContinuation(); Continuation<Integer, Integer> c5 = newContinuation(); Continuation<Integer, Integer> c6 = newContinuation(); c1.add(c2).add(c3).add(c4).add(c5).add(c6).flush(Future.value(1)); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); assertEquals(new Integer(1), get(c4)); assertEquals(new Integer(1), get(c5)); assertEquals(new Integer(1), get(c6)); } @Test public void addAndForward() throws CheckedFutureException { Promise<Integer> p = Promise.apply(); Continuation<Integer, Integer> c = newContinuation(); c.forward(p); p.setValue(1); assertEquals(new Integer(1), get(c)); } @Test public void addAndForward2() throws CheckedFutureException { Promise<Integer> p = Promise.apply(); Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); c1.add(c2).forward(p); p.setValue(1); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); } @Test public void addAndForward3() throws CheckedFutureException { Promise<Integer> p = Promise.apply(); Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); c1.add(c2).add(c3).forward(p); p.setValue(1); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); } @Test public void addAndForward4() throws CheckedFutureException { Promise<Integer> p = Promise.apply(); Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); Continuation<Integer, Integer> c4 = newContinuation(); c1.add(c2).add(c3).add(c4).forward(p); p.setValue(1); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); assertEquals(new Integer(1), get(c4)); } @Test public void addAndForward5() throws CheckedFutureException { Promise<Integer> p = Promise.apply(); Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); Continuation<Integer, Integer> c4 = newContinuation(); Continuation<Integer, Integer> c5 = newContinuation(); c1.add(c2).add(c3).add(c4).add(c5).forward(p); p.setValue(1); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); assertEquals(new Integer(1), get(c4)); assertEquals(new Integer(1), get(c5)); } @Test public void addAndForward6() throws CheckedFutureException { Promise<Integer> p = Promise.apply(); Continuation<Integer, Integer> c1 = newContinuation(); Continuation<Integer, Integer> c2 = newContinuation(); Continuation<Integer, Integer> c3 = newContinuation(); Continuation<Integer, Integer> c4 = newContinuation(); Continuation<Integer, Integer> c5 = newContinuation(); Continuation<Integer, Integer> c6 = newContinuation(); c1.add(c2).add(c3).add(c4).add(c5).add(c6).forward(p); p.setValue(1); assertEquals(new Integer(1), get(c1)); assertEquals(new Integer(1), get(c2)); assertEquals(new Integer(1), get(c3)); assertEquals(new Integer(1), get(c4)); assertEquals(new Integer(1), get(c5)); assertEquals(new Integer(1), get(c6)); } }