public void RecalculationWhenDisableMemoization() { var derived = new MyIncrementalQuery(); var system = new DependencySystem() .Register <IIncrementalInputs>() .Register <IIncrementalQuery>(() => derived); system.AllowMemo = false; system.Get <IIncrementalInputs>().SomeConstant = 7; system.Get <IIncrementalInputs>().SetSomeValue("abc", "xyz"); // First invocation should cause a recomputation var _1 = system.Get <IIncrementalQuery>().CalculatedValue; var _2 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(1, derived.CalculatedValue_invocations); Assert.AreEqual(1, derived.CalculateFoo_invocations); // Next recomputation should also, since memoization is disabled var _3 = system.Get <IIncrementalQuery>().CalculatedValue; var _4 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(2, derived.CalculatedValue_invocations); Assert.AreEqual(2, derived.CalculateFoo_invocations); }
public void RecalculationWhenInputChange() { var derived = new MyIncrementalQuery(); var system = new DependencySystem() .Register <IIncrementalInputs>() .Register <IIncrementalQuery>(() => derived); system.Get <IIncrementalInputs>().SomeConstant = 7; system.Get <IIncrementalInputs>().SetSomeValue("abc", "xyz"); // First invocation should cause a recomputation var _1 = system.Get <IIncrementalQuery>().CalculatedValue; var _2 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(1, derived.CalculatedValue_invocations); Assert.AreEqual(1, derived.CalculateFoo_invocations); // Next recomputation should not var _3 = system.Get <IIncrementalQuery>().CalculatedValue; var _4 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(1, derived.CalculatedValue_invocations); Assert.AreEqual(1, derived.CalculateFoo_invocations); // Changing again should system.Get <IIncrementalInputs>().SomeConstant = 6; system.Get <IIncrementalInputs>().SetSomeValue("abc", "xyw"); var _5 = system.Get <IIncrementalQuery>().CalculatedValue; var _6 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(2, derived.CalculatedValue_invocations); Assert.AreEqual(2, derived.CalculateFoo_invocations); // Changing just one should just recompute one system.Get <IIncrementalInputs>().SetSomeValue("abc", "qwe"); var _7 = system.Get <IIncrementalQuery>().CalculatedValue; var _8 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(2, derived.CalculatedValue_invocations); Assert.AreEqual(3, derived.CalculateFoo_invocations); }
public void NoRecalculationWhenNoInputChange() { var derived = new MyIncrementalQuery(); var system = new DependencySystem() .Register <IIncrementalInputs>() .Register <IIncrementalQuery>(() => derived); system.Get <IIncrementalInputs>().SomeConstant = 7; system.Get <IIncrementalInputs>().SetSomeValue("abc", "xyz"); // First invocation should cause a recomputation var _1 = system.Get <IIncrementalQuery>().CalculatedValue; var _2 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(1, derived.CalculatedValue_invocations); Assert.AreEqual(1, derived.CalculateFoo_invocations); // Next recomputation should not var _3 = system.Get <IIncrementalQuery>().CalculatedValue; var _4 = system.Get <IIncrementalQuery>().CalculateFoo("abc", 4); Assert.AreEqual(1, derived.CalculatedValue_invocations); Assert.AreEqual(1, derived.CalculateFoo_invocations); }