Exemplo n.º 1
0
        public void Test_Awaitor1()
        {
            // 単一Task
            var state  = MaybeTask.From(DummyTask(10));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result));
        }
Exemplo n.º 2
0
        public void Test_Nothing()
        {
            // Nothingを返すTaskはNothingになる
            var state = MaybeTask
                        .From(NothingTask());
            var result = state.Awaitor.Result;

            Assert.False(result.HasValue);
        }
Exemplo n.º 3
0
        public void Test_Nothing2()
        {
            // NothingをかえすTaskがある場合はNothingになる。
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(NothingTask());
            var result = state.Awaitor.Result;

            Assert.False(result.HasValue);
        }
Exemplo n.º 4
0
        public void Test_Awaitor2()
        {
            // 2つのTaskを直列化
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(DummyTask(15));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item2);
        }
Exemplo n.º 5
0
        public void Test_Awaitor3_Flat()
        {
            // 3つのTaskを直列化
            // 結果は自身で定義する。
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(async prev => (await DummyTask(15)).Map(next => (prev, next)))
                        .Map(async prev => (await DummyTask(20)).Map(next => (prev.Item1, prev.Item2, next)));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item2);
            Assert.Equal(20, Polluter.Pollute(result).Item3);
        }
Exemplo n.º 6
0
        public void Test_Awaitor3()
        {
            // 3つのTaskを直列化。
            // 結果はTuple<Tuple<1, 2>, 3>
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(DummyTask(15))
                        .Map(DummyTask(20));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1.Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item1.Item2);
            Assert.Equal(20, Polluter.Pollute(result).Item2);
        }
Exemplo n.º 7
0
        public void Test_Awaitor3_Flat2()
        {
            // 3つのTaskを直列化
            // 結果は自身で定義する。
            // Maybe a -> (a -> Task<Maybe (a b)>) -> Maybe (a b)は実装がわかりにくいので自動化
            // Maybe a -> (a -> Task<(a Maybe b)>) -> (a Maybe b)とならないように。
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(prev => DummyTask(15), (prev, next) => Optional.Just((prev, next)))
                        .Map(prev => DummyTask(20), (prev, next) => Optional.Just((prev.Item1, prev.Item2, next)));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item2);
            Assert.Equal(20, Polluter.Pollute(result).Item3);
        }
Exemplo n.º 8
0
        public void Test_Nothing3()
        {
            bool called1 = false;
            bool called2 = false;
            // NothingをかえすTaskがある場合はNothingになる。
            // ※Nothingの前のTaskを返却する関数は実行される。
            // ※Nothingの後のTaskを返却する関数は実行されない。
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(prev => CallbackTask(() => { called1 = true; return(1); }))
                        .Map(NothingTask())
                        .Map(prev => CallbackTask(() => { called2 = true; return(1); }));
            var result = state.Awaitor.Result;

            Assert.False(result.HasValue);
            Assert.True(called1);
            Assert.False(called2);
        }