public void TestSwitchEarlySSimultaneous() { Ss2 ss1 = new Ss2(); CellSink <Ss2> css = Cell.CreateSink(ss1); Stream <int> so = css.Map <Stream <int> >(b => b.S).SwitchEarlyS(); List <int> @out = new List <int>(); IListener l = so.Listen(@out.Add); Ss2 ss2 = new Ss2(); Ss2 ss3 = new Ss2(); Ss2 ss4 = new Ss2(); ss1.S.Send(0); ss1.S.Send(1); ss1.S.Send(2); css.Send(ss2); ss1.S.Send(7); ss2.S.Send(3); ss2.S.Send(4); ss3.S.Send(2); css.Send(ss3); ss3.S.Send(5); ss3.S.Send(6); ss3.S.Send(7); Transaction.RunVoid(() => { ss4.S.Send(8); css.Send(ss4); ss3.S.Send(2); }); ss4.S.Send(9); l.Unlisten(); CollectionAssert.AreEqual(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, @out); }
public void TestSwitchSSimultaneous() { Ss2 ss1 = new Ss2(); CellSink<Ss2> css = new CellSink<Ss2>(ss1); Stream<int> so = css.Map<Stream<int>>(b => b.S).SwitchS(); List<int> @out = new List<int>(); using (so.Listen(@out.Add)) { Ss2 ss2 = new Ss2(); Ss2 ss3 = new Ss2(); Ss2 ss4 = new Ss2(); ss1.S.Send(0); ss1.S.Send(1); ss1.S.Send(2); css.Send(ss2); ss1.S.Send(7); ss2.S.Send(3); ss2.S.Send(4); ss3.S.Send(2); css.Send(ss3); ss3.S.Send(5); ss3.S.Send(6); ss3.S.Send(7); Transaction.RunVoid(() => { ss3.S.Send(8); css.Send(ss4); ss4.S.Send(2); }); ss4.S.Send(9); } CollectionAssert.AreEqual(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, @out); }