예제 #1
0
        public void GraphInterpreter_should_implement_broadcast_zip()
        {
            WithTestSetup((setup, builder, lastEvents) =>
            {
                var source = setup.NewUpstreamProbe <int>("source");
                var sink   = setup.NewDownstreamProbe <(int, int)>("sink");
                var zip    = new Zip <int, int>();

                builder(new IGraphStageWithMaterializedValue <Shape, object>[] { zip, _broadcast })
                .Connect(source, _broadcast.In)
                .Connect(_broadcast.Out(0), zip.In0)
                .Connect(_broadcast.Out(1), zip.In1)
                .Connect(zip.Out, sink)
                .Init();

                lastEvents().Should().BeEmpty();

                sink.RequestOne();
                lastEvents().Should().BeEquivalentTo(new RequestOne(source));

                source.OnNext(1);
                lastEvents().Should().BeEquivalentTo(new OnNext(sink, (1, 1)), new RequestOne(source));

                sink.RequestOne();
                source.OnNext(2);
                lastEvents().Should().BeEquivalentTo(new OnNext(sink, (2, 2)), new RequestOne(source));
            });
        }
예제 #2
0
        public void GraphInterpreter_should_implement_Zip()
        {
            WithTestSetup((setup, builder, lastEvents) =>
            {
                var source1 = setup.NewUpstreamProbe <int>("source1");
                var source2 = setup.NewUpstreamProbe <string>("source2");
                var sink    = setup.NewDownstreamProbe <(int, string)>("sink");

                builder(_zip)
                .Connect(source1, _zip.In0)
                .Connect(source2, _zip.In1)
                .Connect(_zip.Out, sink)
                .Init();

                lastEvents().Should().BeEmpty();

                sink.RequestOne();
                lastEvents().Should().BeEquivalentTo(new RequestOne(source1), new RequestOne(source2));

                source1.OnNext(42);
                lastEvents().Should().BeEmpty();

                source2.OnNext("Meaning of life");
                lastEvents()
                .Should()
                .Equal(new OnNext(sink, (42, "Meaning of life")), new RequestOne(source1),
                       new RequestOne(source2));
            });
        }
예제 #3
0
        public void GraphInterpreter_should_implement_zip_broadcast()
        {
            WithTestSetup((setup, builder, lastEvents) =>
            {
                var source1   = setup.NewUpstreamProbe <int>("source1");
                var source2   = setup.NewUpstreamProbe <int>("source2");
                var sink1     = setup.NewDownstreamProbe <(int, int)>("sink1");
                var sink2     = setup.NewDownstreamProbe <(int, int)>("sink2");
                var zip       = new Zip <int, int>();
                var broadcast = new Broadcast <(int, int)>(2);

                builder(new IGraphStageWithMaterializedValue <Shape, object>[] { broadcast, zip })
                .Connect(source1, zip.In0)
                .Connect(source2, zip.In1)
                .Connect(zip.Out, broadcast.In)
                .Connect(broadcast.Out(0), sink1)
                .Connect(broadcast.Out(1), sink2)
                .Init();

                lastEvents().Should().BeEmpty();

                sink1.RequestOne();
                lastEvents().Should().BeEquivalentTo(new RequestOne(source1), new RequestOne(source2));

                sink2.RequestOne();

                source1.OnNext(1);
                lastEvents().Should().BeEmpty();

                source2.OnNext(2);
                lastEvents()
                .Should()
                .Equal(new OnNext(sink1, (1, 2)), new RequestOne(source1),
                       new RequestOne(source2), new OnNext(sink2, (1, 2)));
            });
        }