public void Setup(BenchmarkContext context) { _system = ActorSystem.Create("Test"); var settings = ActorMaterializerSettings.Create(_system) .WithFuzzingMode(false) .WithSyncProcessingLimit(int.MaxValue) .WithAutoFusing(false); // We fuse manually in this test in the setup _materializer = _system.Materializer(settings); _testElements = Enumerable.Repeat(0, ElementCount).Select(i => new MutableElement(i)).ToArray(); var testSource = Source.FromGraph(new TestSource(_testElements)); var testSink = Sink.FromGraph(new CompletionLatch()); var identityStage = new IdentityStage(); _singleIdentity = Fuse(testSource.Via(identityStage).ToMaterialized(testSink, Keep.Right)); _chainOfIdentities = Fuse( testSource.Via(identityStage) .Via(identityStage) .Via(identityStage) .Via(identityStage) .Via(identityStage) .Via(identityStage) .Via(identityStage) .Via(identityStage) .Via(identityStage) .Via(identityStage) .ToMaterialized(testSink, Keep.Right)); _singleSelect = Fuse(testSource.Select(Add).ToMaterialized(testSink, Keep.Right)); _chainOfSelects = Fuse( testSource.Select(Add) .Select(Add) .Select(Add) .Select(Add) .Select(Add) .Select(Add) .Select(Add) .Select(Add) .Select(Add) .Select(Add) .ToMaterialized(testSink, Keep.Right)); _repeatTakeSelectAndAggregate = Fuse(Source.Repeat(new MutableElement(0)) .Take(ElementCount) .Select(Add) .Select(Add) .Aggregate(new MutableElement(0), (acc, x) => { acc.Value += x.Value; return(acc); }).ToMaterialized(testSink, Keep.Right)); _singleBuffer = Fuse(testSource.Buffer(10, OverflowStrategy.Backpressure).ToMaterialized(testSink, Keep.Right)); _chainOfBuffers = Fuse( testSource.Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .Buffer(10, OverflowStrategy.Backpressure) .ToMaterialized(testSink, Keep.Right)); var broadcastZipFLow = Flow.FromGraph(GraphDsl.Create(b => { var bcast = b.Add(new Broadcast <MutableElement>(2)); var zip = b.Add(new Zip <MutableElement, MutableElement>()); b.From(bcast).To(zip.In0); b.From(bcast).To(zip.In1); var outlet = b.From(zip.Out).Via(Flow.Create <(MutableElement, MutableElement)>().Select(t => t.Item1)); return(new FlowShape <MutableElement, MutableElement>(bcast.In, outlet.Out)); })); var balanceMergeFlow = Flow.FromGraph(GraphDsl.Create(b => { var balance = b.Add(new Balance <MutableElement>(2)); var merge = b.Add(new Merge <MutableElement>(2)); b.From(balance).To(merge); b.From(balance).To(merge); return(new FlowShape <MutableElement, MutableElement>(balance.In, merge.Out)); })); _broadcastZip = Fuse(testSource.Via(broadcastZipFLow).ToMaterialized(testSink, Keep.Right)); _balanceMerge = Fuse(testSource.Via(balanceMergeFlow).ToMaterialized(testSink, Keep.Right)); _broadcastZipBalanceMerge = Fuse(testSource.Via(broadcastZipFLow).Via(balanceMergeFlow).ToMaterialized(testSink, Keep.Right)); }
public Logic(IdentityStage stage) : base(stage.Shape) { SetHandler(stage.In, onPush: () => Push(stage.Out, Grab(stage.In))); SetHandler(stage.Out, onPull: () => Pull(stage.In)); }