提问人:Gael Lorieul 提问时间:11/2/2023 更新时间:11/2/2023 访问量:85
在单元测试中使用 std::mt19937(带有固定种子)是否安全?
Is it safe to use std::mt19937 (with fixed seed) within unit tests?
问:
我编写了一个需要随机数生成器 (RNG) 的函数的单元测试。测试函数的实现从以下行开始:
const int nSeed = 0;
std::mt19937 randNbGen(nSeed);
randNbGen 对象稍后在同一函数中用于执行最终生成其返回值的计算。
通过播种 RNG,它会从一次运行到下一次运行生成相同的数字序列,我需要这些序列才能使单元测试保持一致。此外,我假设通过使用 std 库中的 RNG(在我的情况下为 std::mt19937),我可以保证生成的数字序列将来不会改变。
但是:6 个月后(即现在)测试失败。我检查了以前通过测试的提交,现在它以与当前相同的函数输出未通过测试。我还注意到 randNbGen 在两次提交中生成相同的数字序列。
RNG(实现)确实有可能改变吗?还是我一定是在某个地方偷偷摸摸的?
处理这种情况的推荐方法是什么?
奖励问题:RNG 的行为在各个平台上是恒定的吗?
PS:我在 Windows 上使用 MSVC (Visual Studio 2022)
答: 暂无答案
评论
std::mt19937