public void TestReactiveExpressionWeakness2() { var dependency = new ReactiveVariable <int>(); AddDependents(dependency, true); GC.Collect(); Assert.AreEqual(0, ReactiveManager.GetDependents(dependency).Count()); }
public void TestExceptionInEvaluate() { var dependent = new Dependent("TestExceptionInEvaluate"); Assert.Throws <NotSupportedException>(() => { ReactiveManager.Evaluate <bool>(dependent, () => { throw new NotSupportedException("woeps"); }); }); var dependency = new object(); ReactiveManager.WasRead(dependency); Assert.AreEqual(0, ReactiveManager.GetDependents(dependency).Count()); }
public void TestDependentWeakness() { var dependency = new object(); foreach (var obj in Enumerable.Range(0, 10000)) { ReactiveManager.Evaluate(new Dependent(), () => { ReactiveManager.WasRead(dependency); return(true); }); } GC.Collect(); Assert.AreEqual(0, ReactiveManager.GetDependents(dependency).Count()); }
public void TestRobustAgainstGarbageCollection() { var dependency = new CompositeReactiveObject(new object(), 0); var dependent = new object(); foreach (var i in Enumerable.Range(0, 1000)) { ReactiveManager.Evaluate(new CompositeReactiveObject(dependent, i.ToString()), () => { ReactiveManager.WasRead(dependency); return(true); }); } GC.Collect(); Assert.AreEqual(1000, ReactiveManager.GetDependents(dependency).Count()); }
public void ReactiveManagerForwardThreadSafety() { var weak = new object(); var weak2 = new object(); var dependency = new CompositeReactiveObject(weak, 0); var firsts = Enumerable.Range(0, 1000).Select(i => new CompositeReactiveObject(weak2, i)).ToList(); var first = new Thread(() => { foreach (var obj in firsts) { ReactiveManager.Evaluate(obj, () => { ReactiveManager.WasRead(dependency); return(true); }); } }); var weak3 = new object(); var seconds = Enumerable.Range(0, 1000).Select(i => new CompositeReactiveObject(weak3, i)).ToList(); var second = new Thread(() => { foreach (var obj in seconds) { ReactiveManager.Evaluate(obj, () => { ReactiveManager.WasRead(dependency); return(true); }); } }); first.Start(); second.Start(); first.Join(); second.Join(); var dependencyCount = ReactiveManager.GetDependents(dependency).Count(); Assert.AreEqual(2000, dependencyCount); }