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