import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { roundRobin, leastBusy } from 'moroutine'; import type { WorkerHandle } from 'moroutine'; function mockHandle(activeCount: number): WorkerHandle { return { activeCount, thread: {} as any, exec: {} as any }; } describe('roundRobin()', () => { it('cycles through workers in order', () => { const b = roundRobin(); const handles = [mockHandle(0), mockHandle(0), mockHandle(0)]; const task = { id: 'test', args: [], uid: 0 } as any; assert.equal(b.select(handles, task), handles[0]); assert.equal(b.select(handles, task), handles[1]); assert.equal(b.select(handles, task), handles[2]); assert.equal(b.select(handles, task), handles[0]); }); }); describe('leastBusy()', () => { it('picks worker with lowest activeCount', () => { const b = leastBusy(); const handles = [mockHandle(3), mockHandle(1), mockHandle(2)]; const task = { id: 'test', args: [], uid: 0 } as any; assert.equal(b.select(handles, task), handles[1]); }); it('breaks ties by index', () => { const b = leastBusy(); const handles = [mockHandle(1), mockHandle(1), mockHandle(1)]; const task = { id: 'test', args: [], uid: 0 } as any; assert.equal(b.select(handles, task), handles[0]); }); });