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); }
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); }
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); }
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); }
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()); }