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/chromeos_policy.cc b/policy_manager/chromeos_policy.cc
index 436dc73..eb50887 100644
--- a/policy_manager/chromeos_policy.cc
+++ b/policy_manager/chromeos_policy.cc
@@ -5,6 +5,7 @@
#include "update_engine/policy_manager/chromeos_policy.h"
#include "update_engine/policy_manager/policy_utils.h"
+#include <algorithm>
#include <string>
using base::Time;
@@ -87,18 +88,13 @@
}
TimeDelta ChromeOSPolicy::FuzzedInterval(PRNG* prng, int interval, int fuzz) {
+ DCHECK_GE(interval, 0);
+ DCHECK_GE(fuzz, 0);
int half_fuzz = fuzz / 2;
- int lower_bound = interval - half_fuzz;
- int upper_bound = interval + half_fuzz + 1;
-
// This guarantees the output interval is non negative.
- if (lower_bound < 0)
- lower_bound = 0;
-
- int fuzzed_interval = lower_bound;
- if (upper_bound - lower_bound > 0)
- fuzzed_interval = lower_bound + prng->rand() % (upper_bound - lower_bound);
- return TimeDelta::FromSeconds(fuzzed_interval);
+ int interval_min = std::max(interval - half_fuzz, 0);
+ int interval_max = interval + half_fuzz;
+ return TimeDelta::FromSeconds(prng->RandMinMax(interval_min, interval_max));
}
} // namespace chromeos_policy_manager