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