From 6a55acb63ef528a8f6bb6bcd904f6fafafd78ba1 Mon Sep 17 00:00:00 2001 From: Dolan Murvihill Date: Thu, 1 Feb 2024 20:36:38 -0800 Subject: [PATCH] Add failing test for crowd-out condition --- test/semaphoreSuite.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/semaphoreSuite.ts b/test/semaphoreSuite.ts index 4c9bc6c..11c0461 100644 --- a/test/semaphoreSuite.ts +++ b/test/semaphoreSuite.ts @@ -50,6 +50,24 @@ export const semaphoreSuite = (factory: (maxConcurrency: number, err?: Error) => assert.deepStrictEqual(values.sort(), [2, 2]); }); + test('acquire allows light items to run eventually', async () => { + let done = false; + async function lightLoop() { + while (!done) { + const [,release] = await semaphore.acquire(1); + await new Promise((resolve) => { setTimeout(resolve, 10); }); + release(); + } + } + lightLoop(); + await clock.tickAsync(5); + lightLoop(); + semaphore.acquire(2).then(() => { done = true; }); + await clock.tickAsync(10); + await clock.tickAsync(10); + assert.strictEqual(done, true); + }); + test('acquire blocks when the semaphore has reached zero until it is released again', async () => { const values: Array = [];