diff options
-rw-r--r-- | Lib/test/test_xrange.py | 19 | ||||
-rw-r--r-- | Objects/rangeobject.c | 6 |
2 files changed, 13 insertions, 12 deletions
diff --git a/Lib/test/test_xrange.py b/Lib/test/test_xrange.py index ab68c3621c..7a2eea552d 100644 --- a/Lib/test/test_xrange.py +++ b/Lib/test/test_xrange.py @@ -2,6 +2,7 @@ import test.test_support, unittest import sys +import pickle import warnings warnings.filterwarnings("ignore", "integer argument expected", @@ -57,15 +58,15 @@ class XrangeTest(unittest.TestCase): self.assertEqual(len(r), sys.maxint) self.assertRaises(OverflowError, xrange, -sys.maxint-1, sys.maxint, 2) - def test_getnewargs(self): - def test(*args): - r = xrange(*args) - return list(r) == list(xrange(*r.__getnewargs__())) - tests = [(13,), (0, 11), (-22, 10), (20, 3, -1), - (13, 21, 3), (-2, 2, 2)] - for t in tests: - self.assert_(test(*t), - "xrange.__getnewargs__() failed with %r" % (t,)) + def test_pickling(self): + testcases = [(13,), (0, 11), (-22, 10), (20, 3, -1), + (13, 21, 3), (-2, 2, 2)] + for proto in range(pickle.HIGHEST_PROTOCOL): + for t in testcases: + r = xrange(*t) + self.assertEquals(list(pickle.loads(pickle.dumps(r, proto))), + list(r)) + def test_main(): test.test_support.run_unittest(XrangeTest) diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c index bfc038ed2d..76d384914e 100644 --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@ -131,9 +131,9 @@ range_repr(rangeobject *r) /* Pickling support */ static PyObject * -range_getnewargs(rangeobject *r) +range_reduce(rangeobject *r, PyObject *args) { - return Py_BuildValue("(iii)", + return Py_BuildValue("(O(iii))", Py_TYPE(r), r->start, r->start + r->len * r->step, r->step); @@ -155,7 +155,7 @@ PyDoc_STRVAR(reverse_doc, static PyMethodDef range_methods[] = { {"__reversed__", (PyCFunction)range_reverse, METH_NOARGS, reverse_doc}, - {"__getnewargs__", (PyCFunction)range_getnewargs, METH_NOARGS}, + {"__reduce__", (PyCFunction)range_reduce, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; |