[pypy-svn] r32418 - in pypy/dist/pypy/module/_random: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Sun Sep 17 18:56:17 CEST 2006
Author: cfbolz
Date: Sun Sep 17 18:56:15 2006
New Revision: 32418
Modified:
pypy/dist/pypy/module/_random/rpy_random.py
pypy/dist/pypy/module/_random/test/test_mersenne.py
Log:
implement jumpahead
Modified: pypy/dist/pypy/module/_random/rpy_random.py
==============================================================================
--- pypy/dist/pypy/module/_random/rpy_random.py (original)
+++ pypy/dist/pypy/module/_random/rpy_random.py Sun Sep 17 18:56:15 2006
@@ -91,3 +91,11 @@
b = self.genrand32() >> 6
return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0)
+ def jumpahead(self, n):
+ mt = self.state
+ for i in range(N - 1, 0, -1):
+ j = n % i
+ mt[i], mt[j] = mt[j], mt[i]
+ for i in range(N):
+ mt[i] += i + 1
+ self.index = N
Modified: pypy/dist/pypy/module/_random/test/test_mersenne.py
==============================================================================
--- pypy/dist/pypy/module/_random/test/test_mersenne.py (original)
+++ pypy/dist/pypy/module/_random/test/test_mersenne.py Sun Sep 17 18:56:15 2006
@@ -1,4 +1,5 @@
-from pypy.module._random.rpy_random import Random
+from pypy.module._random.rpy_random import Random, N, r_uint
+import _random
# the numbers were created by using CPython's _randommodule.c
@@ -21,3 +22,13 @@
assert rnd.state[:14] == [2147483648, 1269538435, 699006892, 381364451,
172015551, 3237099449, 3609464087, 2187366456, 654585064,
2665903765, 3735624613, 1241943673, 2038528247, 3774211972]
+
+def test_jumpahead():
+ rnd = Random()
+ rnd.state = [r_uint(0)] * N
+ rnd.state[0] = r_uint(1)
+ cpyrandom = _random.Random()
+ cpyrandom.setstate(tuple([int(s) for s in rnd.state] + [rnd.index]))
+ rnd.jumpahead(100)
+ cpyrandom.jumpahead(100)
+ assert tuple(rnd.state) + (rnd.index, ) == cpyrandom.getstate()
More information about the Pypy-commit
mailing list