import type { RandomSource } from './random-source'; import { rollInclusive } from './roll-range'; function fixed(...values: number[]): RandomSource { let index = 0; return { next: () => values[index++] }; } describe('rollInclusive', () => { it('maps the bottom of the random range to min and the top to max', () => { expect(rollInclusive(fixed(0), 4, 7)).toBe(4); expect(rollInclusive(fixed(0.999), 4, 7)).toBe(7); }); it('spreads the random range evenly across every value in between', () => { expect(rollInclusive(fixed(0.25), 4, 7)).toBe(5); expect(rollInclusive(fixed(0.5), 4, 7)).toBe(6); expect(rollInclusive(fixed(0.5), 9, 15)).toBe(12); }); it('never exceeds max even if the source yields exactly 1', () => { expect(rollInclusive(fixed(1), 9, 15)).toBe(15); }); it('returns the single value when min equals max', () => { expect(rollInclusive(fixed(0.7), 1, 1)).toBe(1); }); });