[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