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)); }
public void Test_Nothing() { // Nothingを返すTaskはNothingになる var state = MaybeTask .From(NothingTask()); var result = state.Awaitor.Result; Assert.False(result.HasValue); }
public void Test_Nothing2() { // NothingをかえすTaskがある場合はNothingになる。 var state = MaybeTask .From(DummyTask(10)) .Map(NothingTask()); var result = state.Awaitor.Result; Assert.False(result.HasValue); }
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); }
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); }
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); }
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); }
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); }