[pypy-svn] r58963 - in pypy/branch/2.5-merge/pypy/lib: . app_test
arigo at codespeak.net
arigo at codespeak.net
Sat Oct 11 13:27:38 CEST 2008
Author: arigo
Date: Sat Oct 11 13:27:36 2008
New Revision: 58963
Modified:
pypy/branch/2.5-merge/pypy/lib/app_test/test_deque_extra.py
pypy/branch/2.5-merge/pypy/lib/collections.py
Log:
(antocuni, arigo)
Fix CPython's test_deque.
Modified: pypy/branch/2.5-merge/pypy/lib/app_test/test_deque_extra.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/lib/app_test/test_deque_extra.py (original)
+++ pypy/branch/2.5-merge/pypy/lib/app_test/test_deque_extra.py Sat Oct 11 13:27:36 2008
@@ -11,6 +11,7 @@
def setup_method(self,method):
from pypy.lib.collections import deque
+ self.deque = deque
self.d = deque(range(n))
def test_deque(self):
@@ -24,24 +25,35 @@
def test_deque_iter(self):
it = iter(self.d)
- assert len(it) == n
+ raises(TypeError, len, it)
assert it.next() == 0
- assert len(it) == n-1
self.d.pop()
- raises(RuntimeError,it.next)
- assert len(it) == 0
- assert list(it) == []
-
+ raises(RuntimeError, it.next)
+
def test_deque_reversed(self):
it = reversed(self.d)
- assert len(it) == n
+ raises(TypeError, len, it)
assert it.next() == n-1
- assert len(it) == n-1
assert it.next() == n-2
- assert len(it) == n-2
self.d.pop()
- raises(RuntimeError,it.next)
- assert len(it) == 0
- assert list(it) == []
+ raises(RuntimeError, it.next)
+
+ def test_deque_remove(self):
+ d = self.d
+ raises(ValueError, d.remove, "foobar")
+
+ def test_mutate_during_remove(self):
+ # Handle evil mutator
+ class MutateCmp:
+ def __init__(self, deque, result):
+ self.deque = deque
+ self.result = result
+ def __eq__(self, other):
+ self.deque.clear()
+ return self.result
-
+ for match in (True, False):
+ d = self.deque(['ab'])
+ d.extend([MutateCmp(d, match), 'c'])
+ raises(IndexError, d.remove, 'c')
+ assert len(d) == 0
Modified: pypy/branch/2.5-merge/pypy/lib/collections.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/lib/collections.py (original)
+++ pypy/branch/2.5-merge/pypy/lib/collections.py Sat Oct 11 13:27:36 2008
@@ -113,15 +113,10 @@
def remove(self, value):
# Need to be defensive for mutating comparisons
- i = 0
- while i < len(self):
+ for i in range(len(self)):
if self[i] == value:
- if i < len(self):
- del self[i]
- return
- else:
- raise IndexError("deque mutated during remove()")
- i += 1
+ del self[i]
+ return
raise ValueError("deque.remove(x): x not in deque")
def rotate(self, n=1):
@@ -316,9 +311,6 @@
def __iter__(self):
return self
- def __len__(self):
- return self.counter
-
class defaultdict(dict):
def __init__(self, *args, **kwds):
More information about the Pypy-commit
mailing list