public void A_Broadcast_must_work_with_n_way_braodcast()
{
this.AssertAllStagesStopped(() =>
{
var headSink = Sink.First<IEnumerable<int>>();
var t = RunnableGraph.FromGraph(GraphDsl.Create(headSink, headSink, headSink, headSink, headSink,Tuple.Create,
(b, p1, p2, p3, p4, p5) =>
{
var broadcast = b.Add(new Broadcast<int>(5));
var source = b.Add(Source.From(Enumerable.Range(1, 3)));
b.From(source).To(broadcast.In);
b.From(broadcast.Out(0)).Via(Flow.Create<int>().Grouped(5)).To(p1.Inlet);
b.From(broadcast.Out(1)).Via(Flow.Create<int>().Grouped(5)).To(p2.Inlet);
b.From(broadcast.Out(2)).Via(Flow.Create<int>().Grouped(5)).To(p3.Inlet);
b.From(broadcast.Out(3)).Via(Flow.Create<int>().Grouped(5)).To(p4.Inlet);
b.From(broadcast.Out(4)).Via(Flow.Create<int>().Grouped(5)).To(p5.Inlet);
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();
foreach (var list in task.Result)
list.ShouldAllBeEquivalentTo(new[] { 1, 2, 3 });
}, Materializer);
}