public void UnzipWith_must_work_in_the_sad_case()
{
this.AssertAllStagesStopped(() =>
{
var leftProbe = TestSubscriber.CreateManualProbe<int>(this);
var rightProbe = TestSubscriber.CreateManualProbe<string>(this);
RunnableGraph.FromGraph(GraphDsl.Create(b =>
{
var unzip = b.Add(new UnzipWith<int, int, string>(i => Tuple.Create(1/i, 1 + "/" + i)));
var source = Source.From(Enumerable.Range(-2, 5));
b.From(source).To(unzip.In);
b.From(unzip.Out0).To(Sink.FromSubscriber(leftProbe));
b.From(unzip.Out1).To(Sink.FromSubscriber(rightProbe));
return ClosedShape.Instance;
})).Run(Materializer);
var leftSubscription = leftProbe.ExpectSubscription();
var rightSubscription = rightProbe.ExpectSubscription();
Action requestFromBoth = () =>
{
leftSubscription.Request(1);
rightSubscription.Request(1);
};
requestFromBoth();
leftProbe.ExpectNext(1/-2);
rightProbe.ExpectNext("1/-2");
requestFromBoth();
leftProbe.ExpectNext(1 / -1);
rightProbe.ExpectNext("1/-1");
EventFilter.Exception<DivideByZeroException>().ExpectOne(requestFromBoth);
leftProbe.ExpectError().Should().BeOfType<DivideByZeroException>();
rightProbe.ExpectError().Should().BeOfType<DivideByZeroException>();
leftProbe.ExpectNoMsg(TimeSpan.FromMilliseconds(100));
rightProbe.ExpectNoMsg(TimeSpan.FromMilliseconds(100));
}, Materializer);
}