[pypy-commit] pypy py3k: Merged in marky1991/pypy_new/py3k (pull request #444)
marky1991
pypy.commits at gmail.com
Fri May 6 10:20:16 EDT 2016
Author: Mark Young <marky1991 at gmail.com>
Branch: py3k
Changeset: r84268:5624ae62ac73
Date: 2016-05-06 10:19 -0400
http://bitbucket.org/pypy/pypy/changeset/5624ae62ac73/
Log: Merged in marky1991/pypy_new/py3k (pull request #444)
Py3k Finish Deque Fix
diff --git a/lib-python/conftest.py b/lib-python/conftest.py
--- a/lib-python/conftest.py
+++ b/lib-python/conftest.py
@@ -149,7 +149,7 @@
RegrTest('test_codecmaps_jp.py', usemodules='_multibytecodec'),
RegrTest('test_codecmaps_kr.py', usemodules='_multibytecodec'),
RegrTest('test_codecmaps_tw.py', usemodules='_multibytecodec'),
- RegrTest('test_codecs.py', core=True, usemodules='_multibytecodec'),
+ RegrTest('test_codecs.py', core=True, usemodules='_multibytecodec struct unicodedata array'),
RegrTest('test_codeop.py', core=True),
RegrTest('test_coding.py', core=True),
RegrTest('test_collections.py', usemodules='binascii struct'),
@@ -179,7 +179,7 @@
RegrTest('test_decimal.py'),
RegrTest('test_decorators.py', core=True),
RegrTest('test_defaultdict.py', usemodules='_collections'),
- RegrTest('test_deque.py', core=True, usemodules='_collections'),
+ RegrTest('test_deque.py', core=True, usemodules='_collections struct'),
RegrTest('test_descr.py', core=True, usemodules='_weakref'),
RegrTest('test_descrtut.py', core=True),
RegrTest('test_devpoll.py'),
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
@@ -533,7 +533,16 @@
return self.space.newtuple([self.space.gettypefor(W_DequeIter),
self.space.newtuple([self.deque])])
+def W_DequeIter__new__(space, w_subtype, w_deque):
+ w_self = space.allocate_instance(W_DequeIter, w_subtype)
+ if not isinstance(w_deque, W_Deque):
+ raise oefmt(space.w_TypeError, "must be collections.deque, not %T", w_deque)
+
+ W_DequeIter.__init__(space.interp_w(W_DequeIter, w_self), w_deque)
+ return w_self
+
W_DequeIter.typedef = TypeDef("_collections.deque_iterator",
+ __new__ = interp2app(W_DequeIter__new__),
__iter__ = interp2app(W_DequeIter.iter),
__length_hint__ = interp2app(W_DequeIter.length),
__next__ = interp2app(W_DequeIter.next),
@@ -576,10 +585,24 @@
self.index = ri
return w_x
+ def reduce(self):
+ return self.space.newtuple([self.space.gettypefor(W_DequeRevIter),
+ self.space.newtuple([self.deque])])
+
+def W_DequeRevIter__new__(space, w_subtype, w_deque):
+ w_self = space.allocate_instance(W_DequeRevIter, w_subtype)
+ if not isinstance(w_deque, W_Deque):
+ raise oefmt(space.w_TypeError, "must be collections.deque, not %T", w_deque)
+
+ W_DequeRevIter.__init__(space.interp_w(W_DequeRevIter, w_self), w_deque)
+ return w_self
+
W_DequeRevIter.typedef = TypeDef("_collections.deque_reverse_iterator",
+ __new__ = interp2app(W_DequeRevIter__new__),
__iter__ = interp2app(W_DequeRevIter.iter),
__length_hint__ = interp2app(W_DequeRevIter.length),
__next__ = interp2app(W_DequeRevIter.next),
+ __reduce__ = interp2app(W_DequeRevIter.reduce)
)
W_DequeRevIter.typedef.acceptable_as_base_class = False
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
@@ -1,6 +1,6 @@
class AppTestBasic:
- spaceconfig = dict(usemodules=['_collections'])
+ spaceconfig = dict(usemodules=['_collections', 'struct'])
def test_basics(self):
from _collections import deque
@@ -301,3 +301,19 @@
d.pop()
gc.collect(); gc.collect(); gc.collect()
assert X.freed
+
+ def test_DequeIter_pickle(self):
+ from _collections import deque
+ import pickle
+ d = deque([1,2,3])
+ iterator = iter(d)
+ copy = pickle.loads(pickle.dumps(iterator))
+ assert list(iterator) == list(copy)
+
+ def test_DequeRevIter_pickle(self):
+ from _collections import deque
+ import pickle
+ d = deque([1,2,3])
+ iterator = reversed(d)
+ copy = pickle.loads(pickle.dumps(iterator))
+ assert list(iterator) == list(copy)
More information about the pypy-commit
mailing list