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())); }
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), })); }); }
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), })); }); }