public void PairDelayedSecondary() { using (var pipeline = Pipeline.Create()) { Generators.Range(pipeline, 0, 2, TimeSpan.FromSeconds(1)); // hold pipeline open var primary = Generators.Range(pipeline, 0, 5, TimeSpan.FromTicks(1)); var secondary = Generators.Range(pipeline, 0, 5, TimeSpan.FromTicks(1)).Delay(TimeSpan.FromMilliseconds(100)); var paired = primary.Pair(secondary).ToObservable().ToListObservable(); var fused = primary.Fuse(secondary, Available.Last <int>()).ToObservable().ToListObservable(); pipeline.Run(); var pairedResults = paired.AsEnumerable().ToArray(); Assert.IsTrue(Enumerable.SequenceEqual(new ValueTuple <int, int>[] { }, pairedResults)); var fusedResults = fused.AsEnumerable().ToArray(); Assert.IsTrue(Enumerable.SequenceEqual(new ValueTuple <int, int>[] { }, fusedResults)); } }
public void PairDelayedPrimaryWithOutputCreator() { using (var pipeline = Pipeline.Create()) { Generators.Range(pipeline, 0, 2, TimeSpan.FromSeconds(1)); // hold pipeline open var primary = Generators.Range(pipeline, 0, 5, TimeSpan.FromTicks(1)).Delay(TimeSpan.FromMilliseconds(100)); var secondary = Generators.Range(pipeline, 0, 5, TimeSpan.FromTicks(1)); var paired = primary.Pair(secondary, (p, s) => p * 10 + s).ToObservable().ToListObservable(); var fused = primary.Fuse(secondary, Available.Last <int>(), (p, s) => p * 10 + s).ToObservable().ToListObservable(); pipeline.Run(); var pairedResults = paired.AsEnumerable().ToArray(); Assert.IsTrue(Enumerable.SequenceEqual(new[] { 04, 14, 24, 34, 44 }, pairedResults)); var fusedResults = fused.AsEnumerable().ToArray(); Assert.IsTrue(Enumerable.SequenceEqual(new[] { 04, 14, 24, 34, 44 }, fusedResults)); } }
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 pairedTuplesFG = sourceF.Pair(sourceG); var pairedTuplesEFG = sourceE.Pair(pairedTuplesFG); var pairedTuplesDEFG = sourceD.Pair(pairedTuplesEFG); var pairedTuplesCDEFG = sourceC.Pair(pairedTuplesDEFG); var pairedTuplesBCDEFG = sourceB.Pair(pairedTuplesCDEFG); var pairedTuplesABCDEFG = sourceA.Pair(pairedTuplesBCDEFG); var pairedTuples = pairedTuplesABCDEFG.ToObservable().ToListObservable(); var fusedTuplesFG = sourceF.Fuse(sourceG, Available.Last <string>()); var fusedTuplesEFG = sourceE.Fuse(fusedTuplesFG, Available.Last <(string, string)>()); var fusedTuplesDEFG = sourceD.Fuse(fusedTuplesEFG, Available.Last <(string, string, string)>()); var fusedTuplesCDEFG = sourceC.Fuse(fusedTuplesDEFG, Available.Last <(string, string, string, string)>()); var fusedTuplesBCDEFG = sourceB.Fuse(fusedTuplesCDEFG, Available.Last <(string, string, string, string, string)>()); var fusedTuplesABCDEFG = sourceA.Fuse(fusedTuplesBCDEFG, Available.Last <(string, string, string, string, string, string)>()); var fusedTuples = fusedTuplesABCDEFG.ToObservable().ToListObservable(); pipeline.Run(); // cannot validate length as above because without initial value, it is non-deterministic var pairedResults = pairedTuples.AsEnumerable().ToArray(); // can't really validate content ordering as with Join because Pair is inherently non-deterministic foreach (var r in pairedResults) { 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")); } // cannot validate length as above because without initial value, it is non-deterministic var fusedResults = fusedTuples.AsEnumerable().ToArray(); // can't really validate content ordering as with Join because Pair is inherently non-deterministic foreach (var r in fusedResults) { 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")); } } }