Beispiel #1
0
        public void TestGroup()
        {
            var source = new[] {0, 1, 1, 2, 3, 3, 3, 4, 5}
                .ToList()
                .ToLiveCollection();

            var lookup = source
                .SelectStatic(e => new KeyValuePair<int, int>(e, e))
                .Group()
                .ToIndependent();

            lookup.States().Take(1).Check(
                () => { },
                results =>
                {
                    var state = results.Single();
                    Assert.AreEqual(StateStatus.Connecting, state.Status);
                    Assert.AreEqual(null, state.Delta);

                    state.Inner
                        .Verify(new[]
                            {
                                KeyValuePair.Create(0, new[] { 0 }),
                                KeyValuePair.Create(1, new[] { 1, 1 }),
                                KeyValuePair.Create(2, new[] { 2 }),
                                KeyValuePair.Create(3, new[] { 3, 3, 3 }),
                                KeyValuePair.Create(4, new[] { 4 }),
                                KeyValuePair.Create(5, new[] { 5 }),
                            });
                });

            lookup.States().Skip(1).Take(1).Check(
                () => source.PublishInner.Remove(4),
                results =>
                {
                    var state = results.Single();
                    Assert.AreEqual(StateStatus.Connected, state.Status);

                    state.Inner
                        .Verify(new[]
                            {
                                KeyValuePair.Create(0, new[] { 0 }),
                                KeyValuePair.Create(1, new[] { 1, 1 }),
                                KeyValuePair.Create(2, new[] { 2 }),
                                KeyValuePair.Create(3, new[] { 3, 3, 3 }),
                                KeyValuePair.Create(5, new[] { 5 }),
                            });

                    state.Delta
                        .Deletes
                        .Verify(new[]
                            {
                                KeyValuePair.Create(4, new int[0]),
                            });
                });

            lookup.States().Skip(1).Take(1).Check(
                () => source.PublishInner.Remove(3),
                results => Assert.AreEqual(0, results.Count()));
        }
Beispiel #2
0
        public void TestLiveListSelectMany()
        {
            var x = new[] { 0 }
                .ToCollection()
                .ToLiveCollection();
            var y = new[] { 100 }
                .ToCollection()
                .ToLiveCollection();
            var w = x
                .SelectMany(x1 => y.SelectStatic(y1 => Tuple.Create(x1, y1)))
                .ToIndependent();

            w.States().Take(1).Check(
                () => { },
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connecting);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 100),
                        }));
                    Assert.IsTrue(s.Delta == null);
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Add(1),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 100),
                            Tuple.Create(1, 100),
                        }));
                    Assert.IsTrue(s.Delta.Inserts.UnorderedEqual(new[]
                        {
                            Tuple.Create(1, 100),
                        }));
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Remove(1),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 100),
                        }));
                    Assert.IsTrue(s.Delta.Deletes.UnorderedEqual(new[]
                        {
                            Tuple.Create(1, 100),
                        }));
                });
            w.States().Skip(1).Take(2).Check(
                () =>
                {
                    x.PublishInner.Add(1);
                    y.PublishInner.Add(101);
                },
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 100),
                            Tuple.Create(0, 101),
                            Tuple.Create(1, 100),
                            Tuple.Create(1, 101),
                        }));
                    Assert.IsTrue(s.Delta.Inserts.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 101),
                            Tuple.Create(1, 100),
                            Tuple.Create(1, 101),
                        }));
                });
        }
Beispiel #3
0
        public void TestLiveListCrossJoin()
        {
            var x = new[] { 0 }
                .ToCollection()
                .ToLiveCollection();
            var w = x
                .SelectMany(s1 => x.SelectStatic(s2 => Tuple.Create(s1, s2)))
                .ToIndependent();

            w.States().Take(1).Check(
                () => { },
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connecting);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 0),
                        }));
                    Assert.IsTrue(s.Delta == null);
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Add(1),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 0),
                            Tuple.Create(0, 1),
                            Tuple.Create(1, 0),
                            Tuple.Create(1, 1),
                        }));
                    Assert.IsTrue(s.Delta.HasChange());
                    Assert.IsTrue(s.Delta.Inserts.UnorderedEqual(new[]
                        {
                            Tuple.Create(0, 1),
                            Tuple.Create(1, 0),
                            Tuple.Create(1, 1),
                        }));
                });
        }