与えられた2つの数値の間に乱数を返すメソッドを記述しました。ここにはヘッダがあります:このメソッドが数値の範囲を返すかどうかを調べるテスト
int NumRange(int low、int high);
私はその方法を確認したいが、本当に私は(ここでは以下の)テストを書いたが、私の意見では、それはあまりにも複雑だ 、これら二つの数字の間のすべての範囲を返します。たぶんそこにそれをチェックする別の方法がある、または私は
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());
}
最高:)
よありがとう、そして私の下手な英語について申し訳ありません。EDIT: 質問の後、私はテストシナリオを完成するために書いた別のテストを以下に示します。
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));
}
}
EDIT 2: @cyborg回答に基づいて(ありがとう)、私は(ここでは下)ヒストグラムテストを行いました。しかし、それは非常に複雑で、私の意見では、テストは非常にシンプルでなければならないので、私の質問はまだ生きています。私はチェックする簡単な方法を検索します。
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));
}
}
何0,1,2,3,4,5,6,7,8,9あなたのジェネレータが返された場合、 9,9,9,9,9,9 ....?これは範囲を塗りつぶしますが、実際はランダムではありません。 [diehard tests](http://en.wikipedia.org/wiki/Diehard_tests)のような乱数を確認するテストがあります。 –