Beispiel #1
0
        public static async Task WhileMAsync2CancelTest()
        {
            var cts = new CancellationTokenSource();

            cts.Cancel();
            var xs  = Task.FromResult(new Finite <int>(0).ToAsyncMonad());
            var ret = (await xs.WhileMAsync(c => c > 0, c => Task.FromResult(new Finite <int>(c + 2).ToAsyncMonad()), cts.Token)).DownF();

            Assert.Empty(ret.Value);

            cts = new CancellationTokenSource();
            cts.CancelAfter(750);
            var body = new Finite <int>(2, 4);

            xs  = Task.FromResult(new Finite <int>(15, 2).ToAsyncMonad());
            ret = (await xs.WhileMAsync(c => c > 0, c => Task.FromResult(body.Mutate(d => d + c).ToAsyncMonad()), cts.Token)).DownF();

            Assert.Equal(new int[] { 17 }, ret.Value);

            cts = new CancellationTokenSource();
            cts.CancelAfter(1250);
            body = new Finite <int>(2, 1);
            xs   = Task.FromResult(new Finite <int>(15, 3).ToAsyncMonad());
            ret  = (await xs.WhileMAsync(c => c > 0, c => Task.FromResult(body.Mutate(d => d + c).ToAsyncMonad()), cts.Token)).DownF();

            Assert.Equal(new int[] { 17, 0 }, ret.Value);
        }
Beispiel #2
0
        public static async Task WhileMAsync1CancelTest()
        {
            var cts = new CancellationTokenSource();

            cts.Cancel();
            var xs  = Task.FromResult(new Finite <bool>(false).ToAsyncMonad());
            var ret = (await xs.WhileMAsync(() => Task.FromResult(new Finite <int>(2).ToAsyncMonad()), cts.Token)).DownF();

            Assert.Empty(ret.Value);

            cts = new CancellationTokenSource();
            cts.CancelAfter(1250);
            var body = new Finite <int>(2, 4);

            xs  = Task.FromResult(new Finite <bool>(true, 2).ToAsyncMonad());
            ret = (await xs.WhileMAsync(() => Task.FromResult(body.ToAsyncMonad()), cts.Token)).DownF();

            Assert.Equal(new int[] { 2, 2 }, ret.Value);

            cts = new CancellationTokenSource();
            cts.CancelAfter(1250);
            body = new Finite <int>(2, 1);
            xs   = Task.FromResult(new Finite <bool>(true, 3).ToAsyncMonad());
            ret  = (await xs.WhileMAsync(() => Task.FromResult(body.ToAsyncMonad()), cts.Token)).DownF();

            Assert.Equal(new int[] { 2, 0 }, ret.Value);
        }
Beispiel #3
0
        public static async Task WhileMAsync1Test()
        {
            var xs  = Task.FromResult(new Finite <bool>(false).ToAsyncMonad());
            var ret = (await xs.WhileMAsync(() => Task.FromResult(new Finite <int>(2).ToAsyncMonad()))).DownF();

            Assert.Empty(ret.Value);

            var body = new Finite <int>(2, 4);

            xs  = Task.FromResult(new Finite <bool>(true, 2).ToAsyncMonad());
            ret = (await xs.WhileMAsync(() => Task.FromResult(body.ToAsyncMonad()))).DownF();

            Assert.Equal(new int[] { 2, 2 }, ret.Value);

            body = new Finite <int>(2, 1);
            xs   = Task.FromResult(new Finite <bool>(true, 3).ToAsyncMonad());
            ret  = (await xs.WhileMAsync(() => Task.FromResult(body.ToAsyncMonad()))).DownF();

            Assert.Equal(new int[] { 2, 0, 0 }, ret.Value);
        }
Beispiel #4
0
        public static async Task WhileMAsync2Test()
        {
            var xs  = Task.FromResult(new Finite <int>(0).ToAsyncMonad());
            var ret = (await xs.WhileMAsync(c => c > 0, c => Task.FromResult(new Finite <int>(c + 2).ToAsyncMonad()))).DownF();

            Assert.Empty(ret.Value);

            var body = new Finite <int>(2, 4);

            xs  = Task.FromResult(new Finite <int>(15, 2).ToAsyncMonad());
            ret = (await xs.WhileMAsync(c => c > 0, c => Task.FromResult(body.Mutate(d => d + c).ToAsyncMonad()))).DownF();

            Assert.Equal(new int[] { 17, 32 }, ret.Value);

            body = new Finite <int>(2, 1);
            xs   = Task.FromResult(new Finite <int>(15, 3).ToAsyncMonad());
            ret  = (await xs.WhileMAsync(c => c > 0, c => Task.FromResult(body.Mutate(d => d + c).ToAsyncMonad()))).DownF();

            Assert.Equal(new int[] { 17, 0, 0 }, ret.Value);
        }