@@ -597,7 +597,7 @@ test('asyncGeneratorMap infinite sync operator', async () => {
597
597
expect ( results [ 2 ] ) . toStrictEqual ( 4 )
598
598
} )
599
599
600
- test ( 'asyncGeneratorMap respect concurrency' , async ( ) => {
600
+ test ( 'asyncGeneratorMap blocks when concurrency reached ' , async ( ) => {
601
601
const callList = [ ]
602
602
const d = new Deferred ( )
603
603
const p = asyncIterableToArray ( asyncGeneratorMap ( range ( 10 ) , async ( el , i ) => {
@@ -611,3 +611,24 @@ test('asyncGeneratorMap respect concurrency', async () => {
611
611
const result = await p
612
612
expect ( result ) . toStrictEqual ( await asyncIterableToArray ( range ( 10 ) ) )
613
613
} )
614
+
615
+ test ( 'asyncGeneratorMap reaches concurrency' , async ( ) => {
616
+ const expectedConcurrency = 10
617
+ let currentConcurrency = 0
618
+ let maxConcurrency = 0
619
+ const d = new Deferred ( )
620
+ const p = asyncIterableToArray ( asyncGeneratorMap ( range ( 100 ) , async ( el , i ) => {
621
+ currentConcurrency += 1
622
+ maxConcurrency = Math . max ( maxConcurrency , currentConcurrency )
623
+ await d . promise
624
+ currentConcurrency -= 1
625
+ maxConcurrency = Math . max ( maxConcurrency , currentConcurrency )
626
+ return el
627
+ } , expectedConcurrency ) )
628
+ await asyncDelay ( )
629
+ expect ( maxConcurrency ) . toStrictEqual ( expectedConcurrency )
630
+ d . resolve ( )
631
+ const result = await p
632
+ expect ( maxConcurrency ) . toStrictEqual ( expectedConcurrency )
633
+ expect ( result ) . toStrictEqual ( await asyncIterableToArray ( range ( 100 ) ) )
634
+ } )
0 commit comments