@@ -419,6 +419,44 @@ describe('IterableMapper', () => {
419
419
} ) ;
420
420
} ) ;
421
421
422
+ describe ( 'order preservation tests' , ( ) => {
423
+ it ( 'preserves exact sequential order under high load with concurrency 1, maxUnread 8' , async ( ) => {
424
+ const size = 1000 ;
425
+ const input = Array . from ( { length : size } , ( _ , i ) => ( {
426
+ value : i + 1 ,
427
+ ms : Math . floor ( Math . random ( ) * 20 ) , // Random delay 0-19ms
428
+ } ) ) ;
429
+
430
+ const mappedOrder : number [ ] = [ ] ;
431
+ const iteratedOrder : number [ ] = [ ] ;
432
+
433
+ const prefetcher = new IterableMapper (
434
+ input ,
435
+ async ( { value, ms } ) : Promise < number > => {
436
+ await sleep ( ms ) ;
437
+ mappedOrder . push ( value ) ;
438
+ return value ;
439
+ } ,
440
+ { concurrency : 1 , maxUnread : 8 } ,
441
+ ) ;
442
+
443
+ for await ( const value of prefetcher ) {
444
+ iteratedOrder . push ( value ) ;
445
+ // Add some random delay in consuming to create backpressure
446
+ await sleep ( Math . floor ( Math . random ( ) * 20 ) ) ;
447
+ }
448
+
449
+ // Verify exact sequential order preservation
450
+ expect ( iteratedOrder ) . toHaveLength ( size ) ;
451
+ expect ( mappedOrder ) . toHaveLength ( size ) ;
452
+
453
+ // Verify that both mapped and iterated orders match the input sequence
454
+ const expectedOrder = Array . from ( { length : size } , ( _ , i ) => i + 1 ) ;
455
+ expect ( mappedOrder ) . toEqual ( expectedOrder ) ;
456
+ expect ( iteratedOrder ) . toEqual ( expectedOrder ) ;
457
+ } , 30000 ) ;
458
+ } ) ;
459
+
422
460
describe ( 'concurrency 1, maxUnread 1' , ( ) => {
423
461
const concurrency = 1 ;
424
462
const maxUnread = 1 ;
0 commit comments