随机生成器测试.错误在哪里
Random generator test. Where is error?
奇怪的测试行为。我有生成随机值的类。
std::random_device RandomProvider::rd;
std::mt19937 RandomProvider::rnb(RandomProvider::rd());
#define mainDataType unsigned int
mainDataType RandomProvider::GetNextValue(mainDataType upperLimit)
{
static std::uniform_int_distribution<int> uniform_dist(1, upperLimit);
return uniform_dist(rnb);
}
并对其进行单元测试,以测试它的行为。
TEST_METHOD(TestRandomNumber)
{
CreateOper(RandomNumber);
int one = 0, two = 0, three = 0, unlim = 0;
const int cycles = 10000;
for (int i = 0; i < cycles; i++)
{
mainDataType res = RandomProvider::GetNextValue(3);
if (res == 1) one++;
if (res == 2) two++;
if (res == 3) three++;
}
double onePerc = one / (double)cycles;
double twoPerc = two / (double)cycles;
double threePerc = three / (double)cycles;
Assert::IsTrue(onePerc > 0.20 && onePerc < 0.40);
Assert::IsTrue(twoPerc > 0.20 && twoPerc < 0.40);
Assert::IsTrue(threePerc > 0.20 && threePerc < 0.40);
}
测试在调试中一直通过,如果我选择它并仅运行它。但是当我与其他测试一起运行它。我将调试输出添加到文本文件并得到虚幻值 onePerc = 0.0556,twoPerc = 0.0474 和 threePerc = 0.0526...这是怎么回事?(我正在使用VS2013 RC)
由于您在第一次调用时使用静态uniform_int_distribution
GetNextValue
因此设置了最大限制,在任何后续调用中都不会更改。大概在您提到的测试用例中,您对 GetNextValue
的第一次调用与 3
的值不同。从返回的值来看,看起来在第一次此类调用中可能使用了 19 或 20。
相关文章:
- C++泛型类错误,问题出在哪里?
- 我的重复检查代码中的错误究竟在哪里?
- 这个 absl::StrCat 错误在哪里发生,在 Abseil 或 MSVC 中?
- 错误在哪里,为什么这个程序是错误的?
- 致命错误idk在哪里?
- G :内部编译器错误:分割故障(程序CC1PLUS) - 我在哪里开始
- 我在计算 4 个值的方差时的错误在哪里
- 我的调试器说我有一个隔离错误错误,但无法告诉我在哪里,在非常特殊的情况下发生
- 我在Qt信号和插槽问题上的错误在哪里?
- c++双自由或损坏(fasttop)--不确定错误在哪里
- 我的代码中的错误在哪里
- C++外部程序集:我的代码中的错误在哪里
- 此代码中的分段错误在哪里
- 随机生成器测试.错误在哪里
- 树程序中的错误在哪里
- 我的C++代码中的错误在哪里
- 错误在哪里?显示字符串C++Vignere密码
- 我是使用getline的新手,错误在哪里?
- 这个函数请求用户通过循环输入文件名的错误在哪里?
- C++11 可变参数模板函数 -- 错误在哪里?