[pypy-commit] pypy py3.5: test deque's and impl deque copy

plan_rich pypy.commits at gmail.com
Sun Oct 9 05:39:08 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5
Changeset: r87656:08c15132273f
Date: 2016-10-09 11:33 +0200
http://bitbucket.org/pypy/pypy/changeset/08c15132273f/

Log:	test deque's and impl deque copy

diff --git a/pypy/module/_collections/interp_deque.py b/pypy/module/_collections/interp_deque.py
--- a/pypy/module/_collections/interp_deque.py
+++ b/pypy/module/_collections/interp_deque.py
@@ -184,6 +184,27 @@
         self.extend(w_iterable)
         return self.space.wrap(self)
 
+    def mul(self, w_iterable):
+        pass
+
+    def imul(self, w_iterable):
+        pass
+
+    def copy(self):
+        """ A shallow copy """
+        space = self.space
+        w_iter = space.iter(w_iterable)
+        copy = W_Deque(self.space)
+        while True:
+            try:
+                w_obj = space.next(w_iter)
+            except OperationError as e:
+                if e.match(space, space.w_StopIteration):
+                    break
+                raise
+            copy.appendleft(w_obj)
+        return copy
+
     def extendleft(self, w_iterable):
         "Extend the left side of the deque with elements from the iterable"
         # Handle case where id(deque) == id(iterable)
@@ -191,7 +212,6 @@
         if space.is_w(space.wrap(self), w_iterable):
             w_iterable = space.call_function(space.w_list, w_iterable)
         #
-        space = self.space
         w_iter = space.iter(w_iterable)
         while True:
             try:
@@ -477,6 +497,7 @@
     remove     = interp2app(W_Deque.remove),
     reverse    = interp2app(W_Deque.reverse),
     rotate     = interp2app(W_Deque.rotate),
+    copy       = interp2app(W_Deque.copy),
     __weakref__ = make_weakref_descr(W_Deque),
     __iter__ = interp2app(W_Deque.iter),
     __reversed__ = interp2app(W_Deque.reviter),
@@ -496,6 +517,8 @@
     __delitem__ = interp2app(W_Deque.delitem),
     __copy__ = interp2app(W_Deque.copy),
     __reduce__ = interp2app(W_Deque.reduce),
+    __mul__ = interp2app(W_Deque.mul),
+    __imul__ = interp2app(W_Deque.imul),
     maxlen = GetSetProperty(W_Deque.get_maxlen),
 )
 
diff --git a/pypy/module/_collections/test/test_deque.py b/pypy/module/_collections/test/test_deque.py
--- a/pypy/module/_collections/test/test_deque.py
+++ b/pypy/module/_collections/test/test_deque.py
@@ -328,4 +328,8 @@
         from _collections import deque
         d = deque([1,2,3])
         assert d*3 == deque([1,2,3]*3)
-    
+
+    def test_copy(self):
+        from _collections import deque
+        d = deque([1,2,3])
+        assert d is not d.copy()


More information about the pypy-commit mailing list