public void A_Balance_must_work_with_5_way_balance()
{
this.AssertAllStagesStopped(() =>
{
var sink = Sink.First<IEnumerable<int>>();
var t = RunnableGraph.FromGraph(GraphDsl.Create(sink, sink, sink, sink, sink, Tuple.Create,
(b, s1, s2, s3, s4, s5) =>
{
var balance = b.Add(new Balance<int>(5, true));
var source = Source.From(Enumerable.Range(0, 15)).MapMaterializedValue<Tuple<Task<IEnumerable<int>>, Task<IEnumerable<int>>, Task<IEnumerable<int>>, Task<IEnumerable<int>>, Task<IEnumerable<int>>>>(_=> null);
b.From(source).To(balance.In);
b.From(balance.Out(0)).Via(Flow.Create<int>().Grouped(15)).To(s1);
b.From(balance.Out(1)).Via(Flow.Create<int>().Grouped(15)).To(s2);
b.From(balance.Out(2)).Via(Flow.Create<int>().Grouped(15)).To(s3);
b.From(balance.Out(3)).Via(Flow.Create<int>().Grouped(15)).To(s4);
b.From(balance.Out(4)).Via(Flow.Create<int>().Grouped(15)).To(s5);
return ClosedShape.Instance;
})).Run(Materializer);
var task = Task.WhenAll(t.Item1, t.Item2, t.Item3, t.Item4, t.Item5);
task.Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();
task.Result.SelectMany(l=>l).ShouldAllBeEquivalentTo(Enumerable.Range(0, 15));
}, Materializer);
}