示例#1
0
 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);
 }
示例#2
0
        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);
        }
示例#3
0
 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);
 }
示例#4
0
        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);