public void ReturnSimpleValue() { var(result, wasCanceled) = CxRun <int, CancellableMonad <int> > (CancellableExpressionBuilder.Instance, async() => { return(await CancellableMonad <int> .FromValue(3)); }).Run(CancellationToken.None); Assert.IsFalse(wasCanceled); Assert.AreEqual(3, result); }
public void Cancelled_BeforeUse() { var source = new CancellationTokenSource(); source.Cancel(); var(result, wasCanceled) = CxRun <int, CancellableMonad <int> > (CancellableExpressionBuilder.Instance, async() => { var r = await CancellableMonad <int> .FromValue(42); return(r); }).Run(source.Token); Assert.IsTrue(wasCanceled); }
public void ReturnAfterOperations() { var(result, wasCanceled) = CxRun <int, CancellableMonad <int> > (CancellableExpressionBuilder.Instance, async() => { var op = await CancellableMonad <int> .FromValue(1); op = await MaybeDo(() => op + 1); op = await MaybeDo(() => op + 10); return(op); }).Run(CancellationToken.None); Assert.IsFalse(wasCanceled); Assert.AreEqual(12, result); }
public void Cancelled_Between() { var source = new CancellationTokenSource(); var(result, wasCanceled) = CxRun <int, CancellableMonad <int> > (CancellableExpressionBuilder.Instance, async() => { var op = await CancellableMonad <int> .FromValue(1); op = await MaybeDo(() => op + 1); source.Cancel(); op = await MaybeDo(() => op + 10); return(op); }).Run(source.Token); Assert.IsTrue(wasCanceled); Assert.AreEqual(2, result); }
public IMonad <T> Zero <T> () => CancellableMonad <T> .FromValue(default(T));
public IMonad <T> Return <T> (T v) => CancellableMonad <T> .FromValue(v);