Пример #1
0
        public void TestWeakStrongVariable()
        {
            var listener    = new Listener();
            var source      = new CompositeReactiveObject(listener, "first");
            var sameSource  = new CompositeReactiveObject(listener, "first");
            var otherSource = new CompositeReactiveObject(listener, "second");
            var expression  = Reactive.Expression(() =>
            {
                ReactiveManager.WasRead(source);
                return(1);
            });
            var listenerValue = expression.Evaluate();

            Assert.AreEqual(1, listenerValue);

            var counter     = 0;
            var expectation = 0;

            expression.Subscribe(getValue => ReactiveManagerTest.Const(getValue, () => counter++));
            Assert.AreEqual(++expectation, counter);
            ReactiveManager.WasChanged(sameSource);
            Assert.AreEqual(++expectation, counter);

            ReactiveManager.WasChanged(otherSource);
            Assert.AreEqual(expectation, counter);
        }
Пример #2
0
        static void TestManyToOneDependency()
        {
            var dependency = new CompositeReactiveObject(new object(), 0);
            var dependent  = new object();

            foreach (var i in Enumerable.Range(0, 100000))
            {
                ReactiveManager.Evaluate(new CompositeReactiveObject(dependent, i), () =>
                {
                    ReactiveManager.WasRead(dependency);
                    return(true);
                });
            }
        }
        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);
        }