public void A_Balance_must_support_waiting_for_demand_from_all_downstream_subscriptions()
{
this.AssertAllStagesStopped(() =>
{
var s1 = TestSubscriber.CreateManualProbe<int>(this);
var p2 = RunnableGraph.FromGraph(GraphDsl.Create(Sink.AsPublisher<int>(false), (b, p2Sink) =>
{
var balance = b.Add(new Balance<int>(2, true));
var source = Source.From(Enumerable.Range(1, 3)).MapMaterializedValue<IPublisher<int>>(_ => null);
b.From(source).To(balance.In);
b.From(balance.Out(0)).To(Sink.FromSubscriber(s1).MapMaterializedValue<IPublisher<int>>(_ => null));
b.From(balance.Out(1)).To(p2Sink);
return ClosedShape.Instance;
})).Run(Materializer);
var sub1 = s1.ExpectSubscription();
sub1.Request(1);
s1.ExpectNoMsg(TimeSpan.FromMilliseconds(200));
var s2 = TestSubscriber.CreateManualProbe<int>(this);
p2.Subscribe(s2);
var sub2 = s2.ExpectSubscription();
// still no demand from s2
s2.ExpectNoMsg(TimeSpan.FromMilliseconds(200));
sub2.Request(2);
s1.ExpectNext(1);
s2.ExpectNext(2, 3);
s1.ExpectComplete();
s2.ExpectComplete();
}, Materializer);
}