public void FlowFlowGraph_Partial_must_be_able_to_build_and_reuse_simple_partial_graphs()
{
var doubler = GraphDsl.Create(b =>
{
var broadcast = b.Add(new Broadcast<int>(2));
var zip = b.Add(ZipWith.Apply((int i, int i1) => i + i1));
b.From(broadcast.Out(0)).To(zip.In0);
b.From(broadcast.Out(1)).To(zip.In1);
return new FlowShape<int, int>(broadcast.In, zip.Out);
});
var task =
RunnableGraph.FromGraph(GraphDsl.Create(doubler, doubler, Sink.First<IEnumerable<int>>(), Tuple.Create,
(b, d1, d2, sink) =>
{
var source =
Source.From(Enumerable.Range(1, 3))
.MapMaterializedValue<Tuple<NotUsed, NotUsed, Task<IEnumerable<int>>>>(_ => null);
b.From(source).To(d1.Inlet);
b.From(d1.Outlet).To(d2.Inlet);
b.From(d2.Outlet).Via(Flow.Create<int>().Grouped(100)).To(sink.Inlet);
return ClosedShape.Instance;
})).Run(Materializer).Item3;
task.Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();
task.Result.ShouldAllBeEquivalentTo(new[] {4, 8, 12});
}