public void A_Flow_with_SelectAsyncUnordered_must_not_run_more_futures_than_requested_elements()
{
var probe = CreateTestProbe();
var c = TestSubscriber.CreateManualProbe<int>(this);
Source.From(Enumerable.Range(1, 20))
.SelectAsyncUnordered(4, n => Task.Run(() =>
{
probe.Ref.Tell(n);
return n;
}))
.To(Sink.FromSubscriber(c)).Run(Materializer);
var sub = c.ExpectSubscription();
c.ExpectNoMsg(TimeSpan.FromMilliseconds(200));
probe.ExpectNoMsg(TimeSpan.Zero);
sub.Request(1);
var got = new List<int> {c.ExpectNext()};
probe.ExpectMsgAllOf(1, 2, 3, 4, 5);
probe.ExpectNoMsg(TimeSpan.FromMilliseconds(500));
sub.Request(25);
probe.ExpectMsgAllOf(Enumerable.Range(6, 15).ToArray());
c.Within(TimeSpan.FromSeconds(3), () =>
{
Enumerable.Range(2, 19).ForEach(_ => got.Add(c.ExpectNext()));
return NotUsed.Instance;
});
got.ShouldAllBeEquivalentTo(Enumerable.Range(1, 20));
c.ExpectComplete();
}