コード例 #1
0
        public void TestRecoveryMode()
        {
            var expectation    = 1;
            var source1        = new DebugReactiveVariable <int>(0, "source1");
            var source2        = new DebugReactiveVariable <int>(0, "source2");
            var selectedSource = source1;

            source1.Value = 0;
            var function = new ReactiveExpression <int>(() => selectedSource.Value);
            var counter  = 0;

            function.Subscribe(getValue => Const(getValue, () => counter++));
            source1.Value++;
            expectation++;
            Assert.AreEqual(expectation, counter);
            selectedSource = source2;
            Assert.AreEqual(expectation, counter);

            function.Evaluate();
            source2.Value++;

            if (RecoversAfterMissedChange)
            {
                expectation++;
            }
            Assert.AreEqual(expectation, counter);
        }
コード例 #2
0
        public void TestIndirectDiamondSituation()
        {
            var source = new DebugReactiveVariable <bool>(false, "source");

            source.Value = true;
            var mid1    = new DebugReactiveExpression <bool>(() => source.Value, "mid1");
            var mid2    = new DebugReactiveExpression <bool>(() => source.Value, "mid2");
            var sink    = new DebugReactiveExpression <bool>(() => mid1.Evaluate() && mid2.Evaluate(), "sink");
            var counter = 0;

            sink.Subscribe(getSink => Const(getSink, () => counter++));

            Assert.AreEqual(1, counter);
            source.Value = false;
            Assert.AreEqual(2, counter);
        }
コード例 #3
0
        public void CanCache()
        {
            var        counter   = 0;
            var        source    = new DebugReactiveVariable <int>(0, "source");
            Func <int> cacheFunc = () =>
            {
                counter++;
                return(source.Value);
            };
            var cache = new ReactiveCache <int>(cacheFunc);

            Assert.AreEqual(0, counter);
            Assert.AreEqual(0, cache.Get());
            Assert.AreEqual(1, counter);
            Assert.AreEqual(0, cache.Get());
            Assert.AreEqual(1, counter);
        }
コード例 #4
0
        public void TestInvalidate()
        {
            var        counter   = 0;
            var        source    = new DebugReactiveVariable <int>(0, "source");
            Func <int> cacheFunc = () =>
            {
                counter++;
                return(source.Value);
            };
            var cache       = new ReactiveCache <int>(cacheFunc);
            var expectation = 0;

            Assert.AreEqual(0, cache.Get());
            Assert.AreEqual(++expectation, counter);
            cache.Invalidate();
            Assert.AreEqual(0, cache.Get());
            Assert.AreEqual(++expectation, counter);
        }
コード例 #5
0
        public void TestDebugMethodAndProperties()
        {
            var dependency = new WeakDependency(0, null);

            Assert.AreEqual("empty reference", dependency.ToString());

            var variable = new DebugReactiveVariable <bool>(false, "yo");

            Assert.AreEqual("yo", variable.ToString());

            var expression = new DebugReactiveExpression <bool>(() => variable.Value);

            expression.Evaluate();
            Assert.AreEqual("unnamed", expression.ToString());
            Assert.True(variable.Dependents.Any());
            Assert.False(expression.Dependents.Any());


            var cache = new ReactiveCache <bool>(() => false);

            Assert.False(cache.Dependents.Any());
        }