Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }