public void TupleCollapsingPairWithInitialValue() { using (var pipeline = Pipeline.Create()) { var range = Generators.Range(pipeline, 0, 10, TimeSpan.FromMilliseconds(100)); var sourceA = range.Select(x => $"A{x}"); var sourceB = range.Select(x => $"B{x}"); var sourceC = range.Select(x => $"C{x}"); var sourceD = range.Select(x => $"D{x}"); var sourceE = range.Select(x => $"E{x}"); var sourceF = range.Select(x => $"F{x}"); var sourceG = range.Select(x => $"G{x}"); ListObservable <ValueTuple <string, string, string, string, string, string, string> > tuples = // expecting tuple flattening sourceA .Pair(sourceB, "B?") .Pair(sourceC, "C?") .Pair(sourceD, "D?") .Pair(sourceE, "E?") .Pair(sourceF, "F?") .Pair(sourceG, "G?") .ToObservable().ToListObservable(); pipeline.Run(); var results = tuples.AsEnumerable().ToArray(); Assert.AreEqual(10, results.Length); // can't really validate content ordering as with Join because Pair is inherently non-deterministic foreach (var r in results) { Assert.IsTrue(r.Item1.StartsWith("A")); Assert.IsTrue(r.Item2.StartsWith("B")); Assert.IsTrue(r.Item3.StartsWith("C")); Assert.IsTrue(r.Item4.StartsWith("D")); Assert.IsTrue(r.Item5.StartsWith("E")); Assert.IsTrue(r.Item6.StartsWith("F")); Assert.IsTrue(r.Item7.StartsWith("G")); } } }
public void TupleCollapsingReversedPairWithoutInitialValue() { using (var pipeline = Pipeline.Create()) { var range = Generators.Range(pipeline, 0, 10, TimeSpan.FromMilliseconds(100)); var sourceA = range.Select(x => $"A{x}"); var sourceB = range.Select(x => $"B{x}"); var sourceC = range.Select(x => $"C{x}"); var sourceD = range.Select(x => $"D{x}"); var sourceE = range.Select(x => $"E{x}"); var sourceF = range.Select(x => $"F{x}"); var sourceG = range.Select(x => $"G{x}"); var tuplesFG = sourceF.Pair(sourceG); var tuplesEFG = sourceE.Pair(tuplesFG); var tuplesDEFG = sourceD.Pair(tuplesEFG); var tuplesCDEFG = sourceC.Pair(tuplesDEFG); var tuplesBCDEFG = sourceB.Pair(tuplesCDEFG); var tuplesABCDEFG = sourceA.Pair(tuplesBCDEFG); ListObservable <ValueTuple <string, string, string, string, string, string, string> > tuples = tuplesABCDEFG.ToObservable().ToListObservable(); pipeline.Run(); // cannot validate length as above because without initial value, it is non-deterministic var results = tuples.AsEnumerable().ToArray(); // can't really validate content ordering as with Join because Pair is inherently non-deterministic foreach (var r in results) { Assert.IsTrue(r.Item1.StartsWith("A")); Assert.IsTrue(r.Item2.StartsWith("B")); Assert.IsTrue(r.Item3.StartsWith("C")); Assert.IsTrue(r.Item4.StartsWith("D")); Assert.IsTrue(r.Item5.StartsWith("E")); Assert.IsTrue(r.Item6.StartsWith("F")); Assert.IsTrue(r.Item7.StartsWith("G")); } } }