Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        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"));
                }
            }
        }