From 94547f7646895e032f8fc145529d9efc3a70760d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 20 Dec 2006 06:42:06 +0000 Subject: Bug #1590891: random.randrange don't return correct value for big number Needs to be backported. --- Lib/random.py | 2 +- Lib/test/test_random.py | 8 ++++++++ Misc/NEWS | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Lib/random.py b/Lib/random.py index ae2d434..b80f1a1 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -205,7 +205,7 @@ class Random(_random.Random): raise ValueError, "empty range for randrange()" if n >= maxwidth: - return istart + self._randbelow(n) + return istart + istep*self._randbelow(n) return istart + istep*int(self.random() * n) def randint(self, a, b): diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index e3f05a0..ddbcc2f 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -438,6 +438,14 @@ class MersenneTwister_TestBasicOps(TestBasicOps): self.assertEqual(k, numbits) # note the stronger assertion self.assert_(2**k > n > 2**(k-1)) # note the stronger assertion + def test_randrange_bug_1590891(self): + start = 1000000000000 + stop = -100000000000000000000 + step = -200 + x = self.gen.randrange(start, stop, step) + self.assert_(stop < x <= start) + self.assertEqual((x+stop)%step, 0) + _gammacoeff = (0.9999999999995183, 676.5203681218835, -1259.139216722289, 771.3234287757674, -176.6150291498386, 12.50734324009056, -0.1385710331296526, 0.9934937113930748e-05, 0.1659470187408462e-06) diff --git a/Misc/NEWS b/Misc/NEWS index a4eb6e2..c1b9a12 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- Bug #1590891: random.randrange don't return correct value for big number + - Patch #1586791: Better exception messages for some operations on strings, tuples and lists. -- cgit v0.12