PM: Get a random value between [min, max].
This is required for generating random values used for scattering. In
doing so, we shift to using an STL provided generator and distribution
function.
BUG=chromium:358323
TEST=Unit tests.
Change-Id: I6e758605f1d8123ab73a81906ecf7ad83c5e6cb9
Reviewed-on: https://chromium-review.googlesource.com/198780
Tested-by: Gilad Arnold <garnold@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Gilad Arnold <garnold@chromium.org>
diff --git a/policy_manager/prng_unittest.cc b/policy_manager/prng_unittest.cc
index 4bdf836..cbe7690 100644
--- a/policy_manager/prng_unittest.cc
+++ b/policy_manager/prng_unittest.cc
@@ -17,7 +17,7 @@
PRNG b(42);
for (int i = 0; i < 1000; ++i) {
- EXPECT_EQ(a.rand(), b.rand()) << "Iteration i=" << i;
+ EXPECT_EQ(a.Rand(), b.Rand()) << "Iteration i=" << i;
}
}
@@ -25,12 +25,12 @@
PRNG a(42);
PRNG b(5);
- vector<int> values_a;
- vector<int> values_b;
+ vector<uint32_t> values_a;
+ vector<uint32_t> values_b;
for (int i = 0; i < 100; ++i) {
- values_a.push_back(a.rand());
- values_b.push_back(b.rand());
+ values_a.push_back(a.Rand());
+ values_b.push_back(b.Rand());
}
EXPECT_NE(values_a, values_b);
}
@@ -38,10 +38,10 @@
TEST(PmPRNGTest, IsNotConstant) {
PRNG prng(5);
- int initial_value = prng.rand();
+ uint32_t initial_value = prng.Rand();
bool prng_is_constant = true;
for (int i = 0; i < 100; ++i) {
- if (prng.rand() != initial_value) {
+ if (prng.Rand() != initial_value) {
prng_is_constant = false;
break;
}
@@ -49,4 +49,19 @@
EXPECT_FALSE(prng_is_constant) << "After 100 iterations.";
}
+TEST(PmPRNGTest, RandCoversRange) {
+ PRNG a(42);
+ int hits[11] = { 0 };
+
+ for (int i = 0; i < 1000; i++) {
+ int r = a.RandMinMax(0, 10);
+ ASSERT_LE(0, r);
+ ASSERT_GE(10, r);
+ hits[r]++;
+ }
+
+ for (auto& hit : hits)
+ EXPECT_LT(0, hit);
+}
+
} // namespace chromeos_policy_manager