]> granicus.if.org Git - python/commitdiff
SF bug #759889: Pickling of Random is broken
authorRaymond Hettinger <python@rcn.com>
Tue, 24 Jun 2003 20:29:04 +0000 (20:29 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 24 Jun 2003 20:29:04 +0000 (20:29 +0000)
* Implement __reduce__() to support pickling.
* Add a test case to prove a successful roundtrip through pickle.

Lib/random.py
Lib/test/test_random.py

index 1ae25532d3f41514e04d0f2b1eac2f255163197f..1a0b8f341e478cd88b98c10b31a2c1a6605288f9 100644 (file)
@@ -123,6 +123,9 @@ class Random(_random.Random):
     def __setstate__(self, state):  # for pickle
         self.setstate(state)
 
+    def __reduce__(self):
+        return self.__class__, (), self.getstate()
+
 ## -------------------- integer methods  -------------------
 
     def randrange(self, start, stop=None, step=1, int=int, default=None):
index 970b8620bad4463ee873771d4cb8de7d4a3bd6a3..ea2243d1de91af5a0aca413a99477a7281e9ede3 100644 (file)
@@ -3,6 +3,7 @@
 import unittest
 import random
 import time
+import pickle
 from math import log, exp, sqrt, pi
 from sets import Set
 from test import test_support
@@ -102,6 +103,12 @@ class TestBasicOps(unittest.TestCase):
             self.assertEqual(x1, x2)
             self.assertEqual(y1, y2)
 
+    def test_pickling(self):
+        state = pickle.dumps(self.gen)
+        origseq = [self.gen.random() for i in xrange(10)]
+        newgen = pickle.loads(state)
+        restoredseq = [newgen.random() for i in xrange(10)]
+        self.assertEqual(origseq, restoredseq)
 
 class WichmannHill_TestBasicOps(TestBasicOps):
     gen = random.WichmannHill()