[Python-checkins] python/dist/src/Lib/test test_deque.py,1.17,1.18

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Tue Nov 9 08:27:37 CET 2004


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29261/Lib/test

Modified Files:
	test_deque.py 
Log Message:
SF patch #1062279:  deque pickling problems
(Contributed by Dima Dorfman.)

* Support pickling of dictionaries in instances of deque subclasses.
* Support pickling of recursive deques.



Index: test_deque.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_deque.py,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- test_deque.py	2 Oct 2004 13:59:34 -0000	1.17
+++ test_deque.py	9 Nov 2004 07:27:35 -0000	1.18
@@ -297,10 +297,19 @@
 
     def test_pickle(self):
         d = deque(xrange(200))
-        s = pickle.dumps(d)
-        e = pickle.loads(s)
-        self.assertNotEqual(id(d), id(e))
-        self.assertEqual(list(d), list(e))
+        for i in (0, 1, 2):
+            s = pickle.dumps(d, i)
+            e = pickle.loads(s)
+            self.assertNotEqual(id(d), id(e))
+            self.assertEqual(list(d), list(e))
+
+    def test_pickle_recursive(self):
+        d = deque('abc')
+        d.append(d)
+        for i in (0, 1, 2):
+            e = pickle.loads(pickle.dumps(d, i))
+            self.assertNotEqual(id(d), id(e))
+            self.assertEqual(id(e), id(e[-1]))
 
     def test_deepcopy(self):
         mut = [10]
@@ -430,6 +439,10 @@
 class Deque(deque):
     pass
 
+class DequeWithBadIter(deque):
+    def __iter__(self):
+        raise TypeError
+
 class TestSubclass(unittest.TestCase):
 
     def test_basics(self):
@@ -472,6 +485,25 @@
         self.assertEqual(type(d), type(e))
         self.assertEqual(list(d), list(e))
 
+    def test_pickle(self):
+        d = Deque('abc')
+        d.append(d)
+
+        e = pickle.loads(pickle.dumps(d))
+        self.assertNotEqual(id(d), id(e))
+        self.assertEqual(type(d), type(e))
+        dd = d.pop()
+        ee = e.pop()
+        self.assertEqual(id(e), id(ee))
+        self.assertEqual(d, e)
+
+        d.x = d
+        e = pickle.loads(pickle.dumps(d))
+        self.assertEqual(id(e), id(e.x))
+
+        d = DequeWithBadIter('abc')
+        self.assertRaises(TypeError, pickle.dumps, d)
+
     def test_weakref(self):
         d = deque('gallahad')
         p = proxy(d)



More information about the Python-checkins mailing list