Example #1
0
        public void TestLiveDictionaryUnwrap()
        {
            LiveDictionary<int, Live<int>> x =
                new[] {1, 2, 3, 4, 5}
                    .ToDictionary(i => i, i => i.ToLive())
                    .ToLiveDictionary();

            var w = x.Unwrap<int, int, Live<int>>().ToIndependent();

            w.States().Take(1).Check(
                () => { },
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connecting);
                    Assert.IsTrue(s.Inner.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(1, 1),
                                KeyValuePair.Create(2, 2),
                                KeyValuePair.Create(3, 3),
                                KeyValuePair.Create(4, 4),
                                KeyValuePair.Create(5, 5),
                            }));
                    Assert.IsTrue(s.Delta == null);
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Add(KeyValuePair.Create(0, 0.ToLive())),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(1, 1),
                                KeyValuePair.Create(2, 2),
                                KeyValuePair.Create(3, 3),
                                KeyValuePair.Create(4, 4),
                                KeyValuePair.Create(5, 5),
                                KeyValuePair.Create(0, 0),
                            }));
                    Assert.IsTrue(s.Delta.Inserts.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(0, 0),
                            }));
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Remove(x.ToArray().Single(i => i.Value.PublishValue == 3)),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Delta.HasChange());
                    Assert.IsTrue(s.Inner.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(1, 1),
                                KeyValuePair.Create(2, 2),
                                KeyValuePair.Create(4, 4),
                                KeyValuePair.Create(5, 5),
                                KeyValuePair.Create(0, 0),
                            }));
                    Assert.IsTrue(s.Delta.Deletes.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(3, 3),
                            }));
                });
            w.States().Skip(1).Take(1).Check(
                () => x.ToArray().Single(i => i.Key == 2).Value.PublishValue = -2,
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Delta.HasChange());
                    Assert.IsTrue(s.Inner.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(1, 1),
                                KeyValuePair.Create(2, -2),
                                KeyValuePair.Create(4, 4),
                                KeyValuePair.Create(5, 5),
                                KeyValuePair.Create(0, 0),
                            }));
                    Assert.IsTrue(s.Delta.Inserts.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(2, -2),
                            }));
                    Assert.IsTrue(s.Delta.Deletes.UnorderedEqual(
                        new[]
                            {
                                KeyValuePair.Create(2, 2),
                            }));
                });
        }
Example #2
0
        public void TestLiveCollectionUnwrap()
        {
            var x = new[] { 1, 2, 3, 4, 5 }
                .Select(i => i.ToLive(i))
                .ToCollection()
                .ToLiveCollection();
            var w = x.Unwrap().ToIndependent();

            w.States().Take(1).Check(
                () => { },
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connecting);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[] { 1, 2, 3, 4, 5 }));
                    Assert.IsTrue(s.Delta == null);
                    Assert.AreEqual(5, s.LastUpdated);
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Add(0.ToLive(500), 1000),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[] { 1, 2, 3, 4, 5, 0 }));
                    Assert.IsTrue(s.Delta.Inserts.UnorderedEqual(new[] { 0 }));
                    Assert.IsTrue(s.Delta.Deletes == null);
                    Assert.AreEqual(1000, s.LastUpdated);
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Remove(x.ToArray().Single(i => i.PublishValue == 3), 2000),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Delta.HasChange());
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[] { 1, 2, 4, 5, 0 }));
                    Assert.IsTrue(s.Delta.Inserts == null);
                    Assert.IsTrue(s.Delta.Deletes.UnorderedEqual(new[] { 3 }));
                    Assert.AreEqual(2000, s.LastUpdated);
                });
            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Connect(new[] { 10.ToLive(3000) }, 2900),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Reconnecting);
                    Assert.IsTrue(s.Inner.UnorderedEqual(new[] { 10 }));
                    Assert.IsTrue(s.Delta == null);
                    Assert.AreEqual(3000, s.LastUpdated);
                });
        }
Example #3
0
        public void TestLiveListUnwrap()
        {
            var x = new[] { 1, 2, 3, 4, 5 }
                .Select(i => i.ToLive())
                .ToList()
                .ToLiveList();
            var w = x.Unwrap<int>().ToIndependent();

            w.States().Take(1).Check(
                () => { },
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connecting);
                    Assert.IsTrue(s.Inner.SequenceEqual(new[] { 1, 2, 3, 4, 5 }));
                    Assert.IsTrue(s.Delta == null);
                });

            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Add(6.ToLive()),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.SequenceEqual(new[] { 1, 2, 3, 4, 5, 6 }));
                    Assert.IsTrue(s.Delta.IndexDeltas.SequenceEqual(new[]
                    {
                        new IndexNode<int>
                        {
                            Index = 5,
                            DenseIndex = 0,
                            Data = new ListIndexDelta<int>
                            {
                                InsertItems = new[] { 6 },
                            },
                        },
                    }, new IndexNodeComparer<int>()));
                });

            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.RemoveAt(2),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Delta.HasChange());
                    Assert.IsTrue(s.Inner.SequenceEqual(new[] { 1, 2, 4, 5, 6 }));
                    Assert.IsTrue(s.Delta.IndexDeltas.SequenceEqual(new[]
                    {
                        new IndexNode<int>
                        {
                            Index = 2,
                            DenseIndex = 0,
                            Data = new ListIndexDelta<int>
                            {
                                DeleteItems = new[] { 3 },
                            },
                        },
                    }, new IndexNodeComparer<int>()));
                });

            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.Insert(0, 0.ToLive()),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Inner.SequenceEqual(new[] { 0, 1, 2, 4, 5, 6 }));
                    Assert.IsTrue(s.Delta.IndexDeltas.SequenceEqual(new[]
                    {
                        new IndexNode<int>
                        {
                            Index = 0,
                            DenseIndex = 0,
                            Data = new ListIndexDelta<int>
                            {
                                InsertItems = new[] { 0 },
                            },
                        },
                    }, new IndexNodeComparer<int>()));
                });

            w.States().Skip(1).Take(1).Check(
                () => x.PublishInner.RemoveAt(1),
                state =>
                {
                    var s = state.Single();
                    Assert.IsTrue(s.Status == StateStatus.Connected);
                    Assert.IsTrue(s.Delta.HasChange());
                    Assert.IsTrue(s.Inner.SequenceEqual(new[] { 0, 2, 4, 5, 6 }));
                    Assert.IsTrue(s.Delta.IndexDeltas.SequenceEqual(new[]
                    {
                        new IndexNode<int>
                        {
                            Index = 1,
                            DenseIndex = 0,
                            Data = new ListIndexDelta<int>
                            {
                                DeleteItems = new[] { 1 },
                            },
                        },
                    }, new IndexNodeComparer<int>()));
                });
        }