[pypy-commit] pypy py3.5: test + impl deque.insert
plan_rich
pypy.commits at gmail.com
Mon Oct 10 10:55:38 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5
Changeset: r87693:3458326c0cc4
Date: 2016-10-10 16:54 +0200
http://bitbucket.org/pypy/pypy/changeset/3458326c0cc4/
Log: test + impl deque.insert
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
@@ -363,6 +363,25 @@
raise
raise oefmt(space.w_ValueError, "%R is not in deque", w_x)
+ @unwrap_spec(index=int)
+ def insert(self, index, w_value):
+ space = self.space
+ n = space.len_w(self)
+ if n == self.maxlen:
+ raise oefmt(space.w_IndexError, "deque already at its maximum size")
+
+ if index >= n:
+ self.append(w_value)
+ if index <= -n or index == 0:
+ self.appendleft(w_value)
+
+ self.rotate(-index)
+ if index < 0:
+ self.append(w_value)
+ else:
+ self.appendleft(w_value)
+ self.rotate(index)
+
def reviter(self):
"Return a reverse iterator over the deque."
return W_DequeRevIter(self)
@@ -529,6 +548,7 @@
extend = interp2app(W_Deque.extend),
extendleft = interp2app(W_Deque.extendleft),
index = interp2app(W_Deque.index),
+ insert = interp2app(W_Deque.insert),
pop = interp2app(W_Deque.pop),
popleft = interp2app(W_Deque.popleft),
remove = interp2app(W_Deque.remove),
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
@@ -339,14 +339,26 @@
copy = pickle.loads(pickle.dumps(iterator))
assert list(iterator) == list(copy)
- def test_queue_mul(self):
+ def test_deque_mul(self):
from _collections import deque
d = deque([1,2,3])
assert d*3 == deque([1,2,3]*3)
- def test_queue_imul(self):
+ def test_deque_imul(self):
from _collections import deque
d = deque([1,2,3])
d *= 3
assert d == deque([1,2,3]*3)
assert d is not deque([1,2,3]*3)
+
+ def test_deque_insert(self):
+ from _collections import deque
+ for i in range(0,11):
+ d = deque(range(10))
+ d.insert(i, 'a')
+ assert 'a' in d
+ assert 'b' not in d
+ assert d.index('a') == i
+ d = deque(range(10))
+ d.insert(-1, 500)
+ assert d.index(500) == 9
More information about the pypy-commit
mailing list