Turn on validation for out of bounds MockUniform in MockingBitGen

This makes MockUniform fail if the action is specified to return an out of bounds value.

Examples that will fail:

  absl::Uniform(gen, 1, 4) -> 42
  absl::Uniform(gen, 1, 4) -> 4: [1, 4)
  absl::Uniform(absl::IntervalOpenClosed, gen, 1, 4) -> 1: (1, 4]

Examples that will pass:

  absl::Uniform(gen, 1, 4) -> 3
  absl::Uniform(gen, 1, 4) -> 1: [1, 4)
  absl::Uniform(absl::IntervalClosed, gen, 1, 4) -> 4: [1, 4]

Special case: the empty range always returns its boundary, so this case passes:

  absl::Uniform(absl::IntervalOpen, 1, 1) -> 1: (1, 1)

If this breaks your test, your test has a bug: it's relying on an absl::Uniform() call that returns an impossible value. The UnvalidatedMockingBitGen type temporarily exists to allow for disabling the validation to give a bit of time to fix the test, but this type will go away soon.

PiperOrigin-RevId: 643090275
Change-Id: I23470fa9e1efbcb42fa3866237038414545c7be2
diff --git a/absl/random/mock_distributions_test.cc b/absl/random/mock_distributions_test.cc
index 80df871..05e313c 100644
--- a/absl/random/mock_distributions_test.cc
+++ b/absl/random/mock_distributions_test.cc
@@ -76,14 +76,14 @@
 }
 
 TEST(MockUniform, OutOfBoundsIsAllowed) {
-  absl::MockingBitGen gen;
+  absl::UnvalidatedMockingBitGen gen;
 
   EXPECT_CALL(absl::MockUniform<int>(), Call(gen, 1, 100)).WillOnce(Return(0));
   EXPECT_EQ(absl::Uniform<int>(gen, 1, 100), 0);
 }
 
 TEST(ValidatedMockDistributions, UniformUInt128Works) {
-  absl::random_internal::MockingBitGenImpl<true> gen;
+  absl::MockingBitGen gen;
 
   EXPECT_CALL(absl::MockUniform<absl::uint128>(), Call(gen))
       .WillOnce(Return(absl::Uint128Max()));
@@ -91,7 +91,7 @@
 }
 
 TEST(ValidatedMockDistributions, UniformDoubleBoundaryCases) {
-  absl::random_internal::MockingBitGenImpl<true> gen;
+  absl::MockingBitGen gen;
 
   EXPECT_CALL(absl::MockUniform<double>(), Call(gen, 1.0, 10.0))
       .WillOnce(Return(
@@ -115,7 +115,7 @@
 }
 
 TEST(ValidatedMockDistributions, UniformDoubleEmptyRangeCases) {
-  absl::random_internal::MockingBitGenImpl<true> gen;
+  absl::MockingBitGen gen;
 
   ON_CALL(absl::MockUniform<double>(), Call(absl::IntervalOpen, gen, 1.0, 1.0))
       .WillByDefault(Return(1.0));
@@ -135,7 +135,7 @@
 }
 
 TEST(ValidatedMockDistributions, UniformIntEmptyRangeCases) {
-  absl::random_internal::MockingBitGenImpl<true> gen;
+  absl::MockingBitGen gen;
 
   ON_CALL(absl::MockUniform<int>(), Call(absl::IntervalOpen, gen, 1, 1))
       .WillByDefault(Return(1));
@@ -151,7 +151,7 @@
 }
 
 TEST(ValidatedMockUniformDeathTest, Examples) {
-  absl::random_internal::MockingBitGenImpl<true> gen;
+  absl::MockingBitGen gen;
 
   EXPECT_DEATH_IF_SUPPORTED(
       {
@@ -253,7 +253,7 @@
 }
 
 TEST(ValidatedMockUniformDeathTest, DoubleBoundaryCases) {
-  absl::random_internal::MockingBitGenImpl<true> gen;
+  absl::MockingBitGen gen;
 
   EXPECT_DEATH_IF_SUPPORTED(
       {
diff --git a/absl/random/mocking_bit_gen.h b/absl/random/mocking_bit_gen.h
index 92f2e4f..041989d 100644
--- a/absl/random/mocking_bit_gen.h
+++ b/absl/random/mocking_bit_gen.h
@@ -239,7 +239,7 @@
 // since the  underlying implementation creates a type-specific pointer which
 // will be distinct across different DLL boundaries.
 //
-using MockingBitGen = random_internal::MockingBitGenImpl<false>;
+using MockingBitGen = random_internal::MockingBitGenImpl<true>;
 
 // UnvalidatedMockingBitGen
 //