示例#1
0
        public void TestFilterAdd()
        {
            IReactiveSet <int> source = new ReactiveSet <int>();

            FilterSet <int> filtered = new FilterSet <int>(source, x => x > 4);

            source.Add(3);
            source.Add(4);
            source.Add(5);
            source.Add(6);

            Assert.IsFalse(filtered.IsSubscribed);

            List <int> ints = new List <int>();

            System.IDisposable disp = filtered.ObserveAdd().Subscribe(@event => { ints.Add(@event.Value); });

            CollectionAssert.AreEquivalent(ints, new [] { 5, 6 });

            Assert.IsTrue(filtered.IsSubscribed);

            source.Add(7);
            CollectionAssert.AreEquivalent(ints, new [] { 5, 6, 7 });

            disp.Dispose();

            Assert.IsFalse(filtered.IsSubscribed);
        }
示例#2
0
        public void TestAdd()
        {
            IReactiveSet <int> set = new ReactiveSet <int>();

            Assert.IsTrue(set.Add(2));
            Assert.IsFalse(set.Add(2));
            Assert.IsTrue(set.Add(4));

            Assert.AreEqual(2, set.Count);

            CollectionAssert.AreEquivalent(set, new[] { 2, 4 });
        }
示例#3
0
        public void TestClear()
        {
            IReactiveSet <int> set = new ReactiveSet <int>();

            set.Add(2);
            set.Add(2);
            set.Add(4);

            set.Clear();

            Assert.AreEqual(0, set.Count);
            CollectionAssert.AreEquivalent(set, new int[] {});
        }
示例#4
0
        public void TestAdd()
        {
            IReactiveSet <int> source = new ReactiveSet <int>();

            source.Add(3);

            ReactiveSetView <int> view = new ReactiveSetView <int>(source);

            Assert.AreEqual(1, view.Count);
            Assert.AreEqual(3, view[0]);

            source.Add(4);
            Assert.AreEqual(4, view[1]);
        }
示例#5
0
        static void Main(string[] args)
        {
            var set = new ReactiveSet <int>(new[] { 1 });

            var buffered = set.Buffer(3);

            buffered.ToImmutableSets().Select(x => string.Join(", ", x)).Subscribe(Console.WriteLine);

            set.Add(4);
            set.Add(8);
            set.Add(12);
            set.Add(16);

            Console.Read();
        }
示例#6
0
        public void TestRemove()
        {
            IReactiveSet <int> set = new ReactiveSet <int>();

            set.Add(2);
            set.Add(2);
            set.Add(4);

            Assert.IsFalse(set.Remove(5));
            Assert.IsTrue(set.Remove(2));


            Assert.AreEqual(1, set.Count);
            CollectionAssert.AreEquivalent(set, new[] { 4 });
        }
示例#7
0
        public void TestAddObservable()
        {
            IReactiveSet <int> set = new ReactiveSet <int>();

            int?lastAdded = null;

            set.ObserveAdd().Subscribe(@event => lastAdded = @event.Value);

            Assert.IsTrue(set.Add(2));

            Assert.AreEqual(2, lastAdded);

            lastAdded = null;

            Assert.IsFalse(set.Add(2));

            Assert.IsNull(lastAdded);

            Assert.IsTrue(set.Add(4));

            Assert.AreEqual(4, lastAdded);
        }
示例#8
0
        public void TestRemoveObservable()
        {
            IReactiveSet <int> set = new ReactiveSet <int>();

            int?lastRemoved = null;

            set.ObserveRemove().Subscribe(@event => lastRemoved = @event.Value);

            set.Add(2);
            set.Add(3);
            set.Add(4);

            set.Remove(3);
            Assert.AreEqual(3, lastRemoved);

            lastRemoved = null;

            set.Remove(3);

            Assert.IsNull(lastRemoved);

            set.Remove(4);
            Assert.AreEqual(4, lastRemoved);
        }
示例#9
0
        public void TestChainDispose()
        {
            IReactiveSet <int> source    = new ReactiveSet <int>();
            FilterSet <int>    filtered  = new FilterSet <int>(source, x => x >= 4);
            FilterSet <int>    filtered2 = new FilterSet <int>(filtered, x => x <= 20);
            FilterSet <int>    filtered3 = new FilterSet <int>(filtered2, x => x % 2 == 0);

            source.Add(3);
            source.Add(5);
            source.Add(10);
            source.Add(99);

            Assert.IsFalse(filtered.IsSubscribed);
            Assert.IsFalse(filtered2.IsSubscribed);
            Assert.IsFalse(filtered3.IsSubscribed);

            var view = new ReactiveSetView <int>(filtered3);

            Assert.IsTrue(filtered.IsSubscribed);
            Assert.IsTrue(filtered2.IsSubscribed);
            Assert.IsTrue(filtered3.IsSubscribed);

            Assert.AreEqual(1, view.Count);
            Assert.AreEqual(10, view[0]);

            source.Add(13);

            Assert.AreEqual(1, view.Count);
            Assert.AreEqual(10, view[0]);

            source.Add(16);

            Assert.AreEqual(2, view.Count);
            Assert.AreEqual(10, view[0]);
            Assert.AreEqual(16, view[1]);

            view.Dispose();

            Assert.IsFalse(filtered.IsSubscribed);
            Assert.IsFalse(filtered2.IsSubscribed);
            Assert.IsFalse(filtered3.IsSubscribed);

            view = new ReactiveSetView <int>(filtered2);
            var view2 = new ReactiveSetView <int>(filtered);

            Assert.IsTrue(filtered.IsSubscribed);
            Assert.IsTrue(filtered2.IsSubscribed);
            Assert.IsFalse(filtered3.IsSubscribed);

            CollectionAssert.AreEquivalent(view, new int[] { 5, 10, 13, 16 });
            CollectionAssert.AreEquivalent(view2, new int[] { 5, 10, 13, 16, 99 });
            view.Dispose();

            Assert.IsTrue(filtered.IsSubscribed);
            Assert.IsFalse(filtered2.IsSubscribed);
            Assert.IsFalse(filtered3.IsSubscribed);

            view2.Dispose();

            Assert.IsFalse(filtered.IsSubscribed);
            Assert.IsFalse(filtered2.IsSubscribed);
            Assert.IsFalse(filtered3.IsSubscribed);
        }