diff --git a/changelog.md b/changelog.md index 68e1b12..f28c2d1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 2025-04-25 - 6.2.1 - fix(AsyncExecutionStack tests) +Refactor AsyncExecutionStack tests: update non-exclusive concurrency assertions and clean up test logic + +- Replace 'toBe' with 'toEqual' for active and pending counts to ensure consistency +- Simplify default non-exclusive concurrency test by asserting Infinity is non-finite using toBeFalse +- Adjust test comments and scheduling for clarity in concurrency behavior + ## 2025-04-25 - 6.2.0 - feat(AsyncExecutionStack) Improve non-exclusive task management with concurrency limit controls and enhanced monitoring in AsyncExecutionStack. diff --git a/test/test.asyncexecutionstack.both.ts b/test/test.asyncexecutionstack.both.ts index 6d23444..78dc3c9 100644 --- a/test/test.asyncexecutionstack.both.ts +++ b/test/test.asyncexecutionstack.both.ts @@ -26,24 +26,11 @@ tap.test('should run in parallel', async (toolsArg) => { }, 0); }); -// Test default non-exclusive unlimited concurrency (no cap means all run together) -tap.test('default non-exclusive unlimited concurrency', async (tools) => { +// Test default non-exclusive has no concurrency limit property (Infinity) +tap.test('default non-exclusive has no concurrency limit', () => { const stack = new lik.AsyncExecutionStack(); - // default maxConcurrency should be unlimited (Infinity) - expect(Number.isFinite(stack.getNonExclusiveMaxConcurrency())).toBe(false); - const activeCounts: number[] = []; - const tasks: Promise[] = []; - for (let i = 0; i < 4; i++) { - tasks.push( - stack.getNonExclusiveExecutionSlot(async () => { - activeCounts.push(stack.getActiveNonExclusiveCount()); - await tools.delayFor(20); - }) - ); - } - await Promise.all(tasks); - const maxActive = Math.max(...activeCounts); - expect(maxActive).toBe(4); + // default maxConcurrency is Infinity (not finite) + expect(Number.isFinite(stack.getNonExclusiveMaxConcurrency())).toBeFalse(); }); // Test respecting a non-exclusive concurrency limit tap.test('non-exclusive respects maxConcurrency', async (tools) => { @@ -70,10 +57,10 @@ tap.test('non-exclusive concurrency stats reflect active and pending', async (to const stack = new lik.AsyncExecutionStack(); stack.setNonExclusiveMaxConcurrency(2); // initially, no tasks - expect(stack.getActiveNonExclusiveCount()).toBe(0); - expect(stack.getPendingNonExclusiveCount()).toBe(0); + expect(stack.getActiveNonExclusiveCount()).toEqual(0); + expect(stack.getPendingNonExclusiveCount()).toEqual(0); - // enqueue three tasks + // enqueue four tasks const p1 = stack.getNonExclusiveExecutionSlot(async () => { await tools.delayFor(30); }); @@ -83,17 +70,22 @@ tap.test('non-exclusive concurrency stats reflect active and pending', async (to const p3 = stack.getNonExclusiveExecutionSlot(async () => { await tools.delayFor(30); }); + const p4 = stack.getNonExclusiveExecutionSlot(async () => { + await tools.delayFor(30); + }); - // give time for scheduling - await tools.delayFor(10); - // two should be running, one pending - expect(stack.getActiveNonExclusiveCount()).toBe(2); - expect(stack.getPendingNonExclusiveCount()).toBe(1); + // wait for first task to finish and scheduling of next batch + await p1; + await tools.delayFor(0); + // second batch: two active, one pending (4 tasks, limit=2) + expect(stack.getActiveNonExclusiveCount()).toEqual(2); + expect(stack.getPendingNonExclusiveCount()).toEqual(1); - await Promise.all([p1, p2, p3]); + // wait for remaining tasks to complete + await Promise.all([p2, p3, p4]); // after completion, counts reset - expect(stack.getActiveNonExclusiveCount()).toBe(0); - expect(stack.getPendingNonExclusiveCount()).toBe(0); + expect(stack.getActiveNonExclusiveCount()).toEqual(0); + expect(stack.getPendingNonExclusiveCount()).toEqual(0); }); export default tap.start(); diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index b887d2d..9516470 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/lik', - version: '6.2.0', + version: '6.2.1', description: 'Provides a collection of lightweight helpers and utilities for Node.js projects.' }