Esempio n. 1
0
        public void PairDelayedSecondaryWithInitialValue()
        {
            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, 42).ToObservable().ToListObservable();
                var fused     = primary.Fuse(secondary, Available.LastOrDefault(42)).ToObservable().ToListObservable();
                pipeline.Run();

                var pairedResults = paired.AsEnumerable().ToArray();
                Assert.IsTrue(Enumerable.SequenceEqual(new[] { 0, 1, 2, 3, 4 }.Zip(new[] { 42, 42, 42, 42, 42 }, ValueTuple.Create), pairedResults));

                var fusedResults = fused.AsEnumerable().ToArray();
                Assert.IsTrue(Enumerable.SequenceEqual(new[] { 0, 1, 2, 3, 4 }.Zip(new[] { 42, 42, 42, 42, 42 }, ValueTuple.Create), pairedResults));
            }
        }
Esempio n. 2
0
        public void PairDelayedSecondryWithInitialValueAndOutputCreator()
        {
            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, (p, s) => p * 10 + s, 7).ToObservable().ToListObservable();
                var fused     = primary.Fuse(secondary, Available.LastOrDefault(7), (p, s) => p * 10 + s).ToObservable().ToListObservable();
                pipeline.Run();

                var pairedResults = paired.AsEnumerable().ToArray();
                Assert.IsTrue(Enumerable.SequenceEqual(new[] { 07, 17, 27, 37, 47 }, pairedResults));

                var fusedResults = fused.AsEnumerable().ToArray();
                Assert.IsTrue(Enumerable.SequenceEqual(new[] { 07, 17, 27, 37, 47 }, fusedResults));
            }
        }
Esempio n. 3
0
        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}");

                var pairedTuples = // expecting tuple flattening
                                   sourceA
                                   .Pair(sourceB, "B?")
                                   .Pair(sourceC, "C?")
                                   .Pair(sourceD, "D?")
                                   .Pair(sourceE, "E?")
                                   .Pair(sourceF, "F?")
                                   .Pair(sourceG, "G?")
                                   .ToObservable().ToListObservable();

                var fusedTuples = // expecting tuple flattening
                                  sourceA
                                  .Fuse(sourceB, Available.LastOrDefault("B?"))
                                  .Fuse(sourceC, Available.LastOrDefault("C?"))
                                  .Fuse(sourceD, Available.LastOrDefault("D?"))
                                  .Fuse(sourceE, Available.LastOrDefault("E?"))
                                  .Fuse(sourceF, Available.LastOrDefault("F?"))
                                  .Fuse(sourceG, Available.LastOrDefault("G?"))
                                  .ToObservable().ToListObservable();
                pipeline.Run();

                var pairedResults = pairedTuples.AsEnumerable().ToArray();

                Assert.AreEqual(10, pairedResults.Length);

                // 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"));
                }

                var fusedResults = fusedTuples.AsEnumerable().ToArray();

                Assert.AreEqual(10, fusedResults.Length);

                // can't really validate content ordering as with Join because Fuse 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"));
                }
            }
        }