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, index = 0): WorkerHandle { return { activeCount, index, exec: {} as any }; } describe('roundRobin()', () => { it('cycles through workers in order', () => { const b = roundRobin(); const state = b.initialState(); const handles = [mockHandle(0, 0), mockHandle(0, 1), mockHandle(0, 2)]; const task = { id: 'test', args: [], uid: 0 } as any; assert.equal(b.select(handles, task, state), handles[0]); assert.equal(b.select(handles, task, state), handles[1]); assert.equal(b.select(handles, task, state), handles[2]); assert.equal(b.select(handles, task, state), handles[0]); }); it('state is externalized (two instances over the same state agree)', () => { const b1 = roundRobin(); const state = b1.initialState(); const b2 = roundRobin(); const handles = [mockHandle(0, 0), mockHandle(0, 1)]; const task = { id: 'test', args: [], uid: 0 } as any; assert.equal(b1.select(handles, task, state), handles[0]); assert.equal(b2.select(handles, task, state), handles[1]); }); }); 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, undefined), 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, undefined), handles[0]); }); });