[pypy-svn] pypy collections-module: d.extend(d), d += e.
arigo
commits-noreply at bitbucket.org
Tue Feb 15 16:02:54 CET 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: collections-module
Changeset: r41968:5b92b891b703
Date: 2011-02-15 15:21 +0100
http://bitbucket.org/pypy/pypy/changeset/5b92b891b703/
Log: d.extend(d), d += e.
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
@@ -111,19 +111,22 @@
assert cmp(x,y) == cmp(list(x),list(y))
def test_extend(self):
+ from _collections import deque
d = deque('a')
- self.assertRaises(TypeError, d.extend, 1)
d.extend('bcd')
- self.assertEqual(list(d), list('abcd'))
+ assert list(d) == list('abcd')
d.extend(d)
- self.assertEqual(list(d), list('abcdabcd'))
+ assert list(d) == list('abcdabcd')
def test_iadd(self):
+ from _collections import deque
d = deque('a')
+ original_d = d
d += 'bcd'
- self.assertEqual(list(d), list('abcd'))
+ assert list(d) == list('abcd')
d += d
- self.assertEqual(list(d), list('abcdabcd'))
+ assert list(d) == list('abcdabcd')
+ assert original_d is d
def test_extendleft(self):
d = deque('a')
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
@@ -162,8 +162,11 @@
@unwrap_spec('self', W_Root)
def extend(self, w_iterable):
- # XXX Handle case where id(deque) == id(iterable)
+ # Handle case where id(deque) == id(iterable)
space = self.space
+ if space.is_w(space.wrap(self), w_iterable):
+ w_iterable = space.call_function(space.w_list, w_iterable)
+ #
w_iter = space.iter(w_iterable)
while True:
try:
@@ -175,8 +178,17 @@
self.append(w_obj)
@unwrap_spec('self', W_Root)
+ def iadd(self, w_iterable):
+ self.extend(w_iterable)
+ return self.space.wrap(self)
+
+ @unwrap_spec('self', W_Root)
def extendleft(self, w_iterable):
- # XXX Handle case where id(deque) == id(iterable)
+ # Handle case where id(deque) == id(iterable)
+ space = self.space
+ 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:
@@ -336,6 +348,7 @@
__ne__ = interp2app(W_Deque.ne),
__gt__ = interp2app(W_Deque.gt),
__ge__ = interp2app(W_Deque.ge),
+ __iadd__ = interp2app(W_Deque.iadd),
maxlen = GetSetProperty(W_Deque.get_maxlen),
)
More information about the Pypy-commit
mailing list