32 #define TEST_NAME "util/random"
43 BOOST_CHECK(
PRNG ==
nullptr);
45 BOOST_CHECK(
PRNG !=
nullptr);
47 BOOST_CHECK(
PRNG !=
nullptr);
52 std::vector<int> numbers1;
53 for (
size_t i = 0; i < 100; ++i) {
57 std::vector<int> numbers2;
58 for (
size_t i = 0; i < 100; ++i) {
62 std::vector<int> numbers3;
63 for (
size_t i = 0; i < 100; ++i) {
66 BOOST_CHECK_EQUAL_COLLECTIONS(numbers1.begin(), numbers1.end(),
67 numbers3.begin(), numbers3.end());
68 bool all_equal =
true;
69 for (
size_t i = 0; i < numbers1.size(); ++i) {
70 if (numbers1[i] != numbers2[i]) {
74 BOOST_CHECK(!all_equal);
79 for (
size_t i = 0; i < 1000; ++i) {
87 for (
size_t i = 0; i < 1000; ++i) {
88 BOOST_CHECK_GE(
RandomReal(-100.0, 100.0), -100.0);
89 BOOST_CHECK_LE(
RandomReal(-100.0, 100.0), 100.0);
95 const double kMean = 1.0;
96 const double kSigma = 1.0;
97 const size_t kNumValues = 100000;
98 std::vector<double> values;
99 for (
size_t i = 0; i < kNumValues; ++i) {
102 BOOST_CHECK_LE(std::abs(
Mean(values) - kMean), 1
e-2);
103 BOOST_CHECK_LE(std::abs(
StdDev(values) - kSigma), 1
e-2);
108 std::vector<int> numbers(0);
110 numbers = {1, 2, 3, 4, 5};
111 std::vector<int> shuffled_numbers = numbers;
113 BOOST_CHECK_EQUAL_COLLECTIONS(numbers.begin(), numbers.end(),
114 shuffled_numbers.begin(),
115 shuffled_numbers.end());
120 std::vector<int> numbers(1000);
121 std::iota(numbers.begin(), numbers.end(), 0);
122 std::vector<int> shuffled_numbers = numbers;
123 Shuffle(1000, &shuffled_numbers);
124 size_t num_shuffled = 0;
125 for (
size_t i = 0; i < numbers.size(); ++i) {
126 if (numbers[i] != shuffled_numbers[i]) {
130 BOOST_CHECK_GT(num_shuffled, 0);
void SetPRNGSeed(unsigned seed)
double StdDev(const std::vector< T > &elems)
thread_local std::unique_ptr< std::mt19937 > PRNG
T RandomInteger(const T min, const T max)
double Mean(const std::vector< T > &elems)
T RandomGaussian(const T mean, const T stddev)
T RandomReal(const T min, const T max)
void Shuffle(const uint32_t num_to_shuffle, std::vector< T > *elems)
BOOST_AUTO_TEST_CASE(TestPRNGSeed)