Beispiel #1
0
        public void TestReactiveExpressionWeakness2()
        {
            var dependency = new ReactiveVariable <int>();

            AddDependents(dependency, true);

            GC.Collect();
            Assert.AreEqual(0, ReactiveManager.GetDependents(dependency).Count());
        }
Beispiel #2
0
        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);
        }