public void TestUnsafe() { var i = 0; Func <int, bool> fun = q => { i++; return(true); }; Assert.AreEqual(true, fun(3)); Assert.AreEqual(1, i); Assert.AreEqual(true, fun(3)); Assert.AreEqual(2, i); Assert.AreEqual(true, fun(3)); Assert.AreEqual(3, i); i = 0; var decorated = new RunOnceDelegateDecorator().DecorateRunOnceUnsafe(fun); Assert.AreNotEqual(fun, decorated); Assert.AreEqual(true, decorated(3)); Assert.AreEqual(1, i); Assert.AreEqual(false, decorated(3)); Assert.AreEqual(1, i); Assert.AreEqual(false, decorated(3)); Assert.AreEqual(1, i); }
public void TestDummyWrapping() { Func <int, bool> isEven = i => i % 2 == 0; Assert.AreEqual(true, isEven(2)); Assert.AreEqual(false, isEven(3)); var decoreated = new RunOnceDelegateDecorator().DecorateDummy(isEven); Assert.AreEqual(true, decoreated(2)); Assert.AreEqual(false, decoreated(3)); }