refactor(api): move RandomSource to shared and add rollInclusive
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
19
apps/api/src/shared/roll-range.ts
Normal file
19
apps/api/src/shared/roll-range.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import type { RandomSource } from './random-source';
|
||||
|
||||
/**
|
||||
* Rolls an inclusive integer in [min, max] from one value of `random`.
|
||||
*
|
||||
* `RandomSource.next()` is documented as [0, 1), but the clamp keeps a
|
||||
* misbehaving or hand-stubbed source from ever exceeding `max`.
|
||||
*/
|
||||
export function rollInclusive(
|
||||
random: RandomSource,
|
||||
min: number,
|
||||
max: number,
|
||||
): number {
|
||||
if (max <= min) {
|
||||
return min;
|
||||
}
|
||||
|
||||
return Math.min(max, min + Math.floor(random.next() * (max - min + 1)));
|
||||
}
|
||||
Reference in New Issue
Block a user