public void A_Balance_must_fairly_balance_between_three_outputs()
{
this.AssertAllStagesStopped(() =>
{
var probe = this.SinkProbe<int>();
var t = RunnableGraph.FromGraph(GraphDsl.Create(probe, probe, probe, Tuple.Create,
(b, o1, o2, o3) =>
{
var balance = b.Add(new Balance<int>(3));
var source =
Source.From(Enumerable.Range(1,7))
.MapMaterializedValue<Tuple<TestSubscriber.Probe<int>, TestSubscriber.Probe<int>, TestSubscriber.Probe<int>>>(_ => null);
b.From(source).To(balance.In);
b.From(balance.Out(0)).To(o1);
b.From(balance.Out(1)).To(o2);
b.From(balance.Out(2)).To(o3);
return ClosedShape.Instance;
})).Run(Materializer);
var p1 = t.Item1;
var p2 = t.Item2;
var p3 = t.Item3;
p1.RequestNext(1);
p2.RequestNext(2);
p3.RequestNext(3);
p2.RequestNext(4);
p1.RequestNext(5);
p3.RequestNext(6);
p1.RequestNext(7);
p1.ExpectComplete();
p2.ExpectComplete();
p3.ExpectComplete();
}, Materializer);
}