SF bug #759889: Pickling of Random is broken

* Implement __reduce__() to support pickling.
* Add a test case to prove a successful roundtrip through pickle.
This commit is contained in:
Raymond Hettinger 2003-06-24 20:29:04 +00:00
parent 663219a8cc
commit 5f078ff7f0
2 changed files with 10 additions and 0 deletions

View 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):

View 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()