C++ 检查该方法是否返回一系列数字的测试
我编写了一个方法,返回两个给定数字之间的随机数。这里是标题: 整数范围(整数低、整数高) 我想检查这个方法是否真的返回了这两个数字之间的所有范围, 所以我写了一个测试(如下),但在我看来它太复杂了。也许还有别的方法可以检查,或者我是最好的:)C++ 检查该方法是否返回一系列数字的测试,c++,random,googletest,C++,Random,Googletest,我编写了一个方法,返回两个给定数字之间的随机数。这里是标题: 整数范围(整数低、整数高) 我想检查这个方法是否真的返回了这两个数字之间的所有范围, 所以我写了一个测试(如下),但在我看来它太复杂了。也许还有别的方法可以检查,或者我是最好的:) TEST\u F(随机生成器测试,填充所有范围) { //在集合中-没有重复项 设置结果; int i; 对于(i=0;i您可以测试均匀分布,而不是完整覆盖率。为此,请计算直方图并检查每个箱子的数量是否超过预期 编辑: 如果您想进行更严格的测试,请参见以下
TEST\u F(随机生成器测试,填充所有范围)
{
//在集合中-没有重复项
设置结果;
int i;
对于(i=0;i您可以测试均匀分布,而不是完整覆盖率。为此,请计算直方图并检查每个箱子的数量是否超过预期
编辑:
如果您想进行更严格的测试,请参见以下答案:如果生成器返回0,1,2,3,4,5,6,7,8,9,9,9,9,9…?这会填满范围,但不是真正随机的。有些测试会检查数字序列的随机性,例如。问题是,检查均匀分布的方法是什么?我告诉过您如何验证分布n是统一的-创建一个直方图,并检查所有箱子是否都获得了近似预期值。很抱歉,但我的问题与谷歌测试或其他单元测试有关。如何编写检查直方图的测试。我了解原理,但我无法在测试方法中进行近似检查。
TEST_F(RandomGeneratorTest, fill_all_the_range)
{
// In set - there is no duplicates
std::set<int> results;
int i;
for (i=0;i<1000;i++)
results.insert(NumRange(0,9));
EXPECT_EQ(10, results.size());
}
TEST_F(RandomGeneratorTest, only_in_the_range)
{
int i,result;
for (i=0;i<1000;i++)
{
result = NumRange(0,9);
EXPECT_TRUE((result<=9) && (result>=0));
}
}
TEST_F(RandomGeneratorTest, fill_all_of_the_histogram_range)
{
int results[10]= {0};
int i, approxRes;
for (i=0;i<100000000;i++)
results[NumRange(0,9)]+=1;
for (i=0;i<10;i++)
{
approxRes = results[i]/10000;
EXPECT_TRUE((approxRes<=1001) && (approxRes>=999));
}
}