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
//