From 5f078ff7f0c6bb5086fae077379fc79729c34d2d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 24 Jun 2003 20:29:04 +0000 Subject: [PATCH] SF bug #759889: Pickling of Random is broken * Implement __reduce__() to support pickling. * Add a test case to prove a successful roundtrip through pickle. --- Lib/random.py | 3 +++ Lib/test/test_random.py | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/Lib/random.py b/Lib/random.py index 1ae25532d3f..1a0b8f341e4 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -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): diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 970b8620bad..ea2243d1de9 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -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()