summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/noise.cpp3
-rw-r--r--src/unittest/test_random.cpp3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/noise.cpp b/src/noise.cpp
index 443c405ce..2948fb765 100644
--- a/src/noise.cpp
+++ b/src/noise.cpp
@@ -90,6 +90,9 @@ u32 PcgRandom::next()
u32 PcgRandom::range(u32 bound)
{
+ // If the bound is 0, we cover the whole RNG's range
+ if (bound == 0)
+ return next();
/*
If the bound is not a multiple of the RNG's range, it may cause bias,
e.g. a RNG has a range from 0 to 3 and we take want a number 0 to 2.
diff --git a/src/unittest/test_random.cpp b/src/unittest/test_random.cpp
index 20cfca334..bbee57719 100644
--- a/src/unittest/test_random.cpp
+++ b/src/unittest/test_random.cpp
@@ -101,6 +101,9 @@ void TestRandom::testPcgRandomRange()
EXCEPTION_CHECK(PrngException, pr.range(5, 1));
+ // Regression test for bug 3027
+ pr.range(pr.RANDOM_MIN, pr.RANDOM_MAX);
+
for (u32 i = 0; i != 32768; i++) {
int min = (pr.next() % 3000) - 500;
int max = (pr.next() % 3000) - 500;