11import { ZeroBackpressureSemaphore , SemaphoreJob } from './ZeroBackpressureSemaphore' ;
22
3- type PromiseResolveType = ( value ?: unknown ) => void ;
4-
5- const resolveFast = async ( ) => { expect ( 14 ) . toBeGreaterThan ( 3 ) ; } ;
6- const delay = ( ms : number ) => new Promise ( res => setTimeout ( res , ms ) ) ;
3+ type PromiseResolveCallbackType = ( value ?: unknown ) => void ;
4+
5+ /**
6+ * resolveFast
7+ *
8+ * The one-and-only purpose of this function, is triggerring an event-loop iteration.
9+ * It is relevant whenever a test needs to simulate tasks from the Node.js' micro-tasks queue.
10+ */
11+ const resolveFast = async ( ) => {
12+ expect ( 14 ) . toBeGreaterThan ( 3 ) ;
13+ } ;
714
815describe ( 'ZeroBackpressureSemaphore tests' , ( ) => {
916 describe ( 'Happy path tests' , ( ) => {
1017 test ( 'waitForCompletion: should process only one job at a time, when jobs happen to be scheduled sequentially (trivial case)' , async ( ) => {
1118 const maxConcurrentJobs = 7 ;
1219 const semaphore = new ZeroBackpressureSemaphore < void > ( maxConcurrentJobs ) ;
13- let finishCurrentJob : PromiseResolveType ;
20+ let finishCurrentJob : PromiseResolveCallbackType ;
1421 const numberOfJobs = 10 ;
1522
1623 for ( let jobNo = 1 ; jobNo <= numberOfJobs ; ++ jobNo ) {
@@ -30,7 +37,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
3037 const maxConcurrentJobs = 1 ;
3138 const lock = new ZeroBackpressureSemaphore < void > ( maxConcurrentJobs ) ;
3239 const numberOfJobs = 10 ;
33- const jobCompletionCallbacks : PromiseResolveType [ ] = [ ] ;
40+ const jobCompletionCallbacks : PromiseResolveCallbackType [ ] = [ ] ;
3441 const waitTillCompletionPromises : Promise < void > [ ] = [ ] ;
3542
3643 for ( let jobNo = 0 ; jobNo < numberOfJobs ; ++ jobNo ) {
@@ -73,7 +80,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
7380 test ( 'waitForCompletion: should not exceed max concurrently executing jobs, when the amont of pending jobs is bigger than the amount of rooms' , async ( ) => {
7481 const maxConcurrentJobs = 5 ;
7582 const numberOfJobs = 17 * maxConcurrentJobs - 1 ;
76- const jobCompletionCallbacks : PromiseResolveType [ ] = [ ] ;
83+ const jobCompletionCallbacks : PromiseResolveCallbackType [ ] = [ ] ;
7784 const waitTillCompletionPromises : Promise < void > [ ] = [ ] ;
7885
7986 const semaphore = new ZeroBackpressureSemaphore < void > ( maxConcurrentJobs ) ;
@@ -88,7 +95,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
8895 }
8996
9097 for ( let jobNo = 0 ; jobNo < numberOfJobs ; ++ jobNo ) {
91- // Just trigger the event loop, let the Semaphore to decide which jobs can
98+ // Triggering the event loop, allowing the Semaphore to decide which jobs can
9299 // start their execution.
93100 await Promise . race ( [ ...waitTillCompletionPromises , resolveFast ( ) ] ) ;
94101
@@ -144,7 +151,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
144151
145152 test ( 'waitTillAllExecutingJobsAreSettled: should resolve once all executing jobs are settled' , async ( ) => {
146153 const maxConcurrentJobs = 12 ;
147- const jobCompletionCallbacks : PromiseResolveType [ ] = [ ] ;
154+ const jobCompletionCallbacks : PromiseResolveCallbackType [ ] = [ ] ;
148155 const waitTillCompletionPromises : Promise < void > [ ] = [ ] ;
149156
150157 const semaphore = new ZeroBackpressureSemaphore < void > ( maxConcurrentJobs ) ;
@@ -158,7 +165,6 @@ describe('ZeroBackpressureSemaphore tests', () => {
158165 waitTillCompletionPromises . push ( waitPromise ) ;
159166 }
160167
161- await resolveFast ( ) ; // Trigger the event loop.
162168 const waitTillAllAreSettledPromise = semaphore . waitTillAllExecutingJobsAreSettled ( ) ;
163169 await resolveFast ( ) ; // Trigger the event loop.
164170
0 commit comments