功能说明
测试中使用 Math.random 会导致用例不可复现。该函数用 Mulberry32 算法根据整数种子生成确定性序列,并提供整数区间和数组取值辅助方法,适合生成稳定的测试数据。相同种子得到相同序列,因此失败用例可以准确重放,快照也不会无故变化。
关键代码
state 初始化为 32 位无符号种子,next 每次加常数、混合位运算并归一化到 0 到 1。int 校验闭区间边界,pick 校验非空数组。返回值只暴露 next、int、pick,内部状态不会泄漏到外部。
state = (state + 0x6d2b79f5) >>> 0;
let value = state;
value = Math.imul(value ^ (value >>> 15), value | 1);
value ^= value + Math.imul(value ^ (value >>> 7), value | 61);
return ((value ^ (value >>> 14)) >>> 0) / 4294967296;
使用注意
该生成器不是密码学安全的,不能用于令牌、密钥或抽奖等安全场景。种子必须是整数,负数会按 32 位无符号解释。int 的上界包含在结果中。pick 返回元素引用,不复制对象。序列质量适合测试,但不保证统计意义上的高质量随机性。
验证方式
断言相同种子两次生成的五个 next 值完全一致,不同种子通常产生不同序列。int(1, 6) 始终在 1 到 6 之间。pick 从非空数组返回元素。空数组或非法区间抛 RangeError,非整数种子抛 TypeError。负数种子也应正常工作。