public void Test_TrueFunction() { // Boolを返却する関数をしていする。 // 関数はこのタイミングで即時に評価される。 var trueValue = Bool.Return(() => true); var isCalled = false; trueValue.When(() => { isCalled = true; }, () => Abort()); Assert.True(isCalled); var one = trueValue.When(() => 1, () => 0); Assert.Equal(1, one); var t = trueValue.Bind(_ => { Assert.True(_); return(Bool.False()); }); Assert.False(Polluter.Pollute(t)); var t2 = trueValue.Fmap(_ => { Assert.True(_); return(false); }); Assert.False(Polluter.Pollute(t2)); }
public void Test_FalseFunction() { var falseValue = Bool.Return(() => false); var isCalled = false; falseValue.When(() => Abort(), () => { isCalled = true; }); Assert.True(isCalled); var one = falseValue.When(() => 0, () => 1); Assert.Equal(1, one); var t = falseValue.Bind(_ => { Abort(); return(Bool.False()); }); Assert.Throws <InvalidOperationException>( () => Polluter.Pollute(t) ); var t2 = falseValue.Fmap(_ => { Abort(); return(false); }); Assert.Throws <InvalidOperationException>( () => Polluter.Pollute(t2) ); }