mirror of
https://github.com/python/cpython.git
synced 2025-10-14 18:59:46 +00:00
Apply remove's mutation test after every equality test.
This commit is contained in:
parent
4aec61e0fc
commit
d73202c596
2 changed files with 15 additions and 14 deletions
|
@ -19,11 +19,12 @@ class BadCmp:
|
|||
raise RuntimeError
|
||||
|
||||
class MutateCmp:
|
||||
def __init__(self, deque):
|
||||
def __init__(self, deque, result):
|
||||
self.deque = deque
|
||||
self.result = result
|
||||
def __eq__(self, other):
|
||||
self.deque.clear()
|
||||
return True
|
||||
return self.result
|
||||
|
||||
class TestBasic(unittest.TestCase):
|
||||
|
||||
|
@ -226,11 +227,11 @@ class TestBasic(unittest.TestCase):
|
|||
self.assert_(x is y)
|
||||
|
||||
# Handle evil mutator
|
||||
d = deque(['ab'])
|
||||
d.extend([MutateCmp(d), 'c'])
|
||||
e = deque(d)
|
||||
self.assertRaises(IndexError, d.remove, 'c')
|
||||
self.assertEqual(d, deque())
|
||||
for match in (True, False):
|
||||
d = deque(['ab'])
|
||||
d.extend([MutateCmp(d, match), 'c'])
|
||||
self.assertRaises(IndexError, d.remove, 'c')
|
||||
self.assertEqual(d, deque())
|
||||
|
||||
def test_repr(self):
|
||||
d = deque(xrange(200))
|
||||
|
|
|
@ -376,14 +376,14 @@ deque_remove(dequeobject *deque, PyObject *value)
|
|||
for (i=0 ; i<n ; i++) {
|
||||
PyObject *item = deque->leftblock->data[deque->leftindex];
|
||||
int cmp = PyObject_RichCompareBool(item, value, Py_EQ);
|
||||
|
||||
if (deque->len != n) {
|
||||
PyErr_SetString(PyExc_IndexError,
|
||||
"deque mutated during remove().");
|
||||
return NULL;
|
||||
}
|
||||
if (cmp > 0) {
|
||||
PyObject *tgt;
|
||||
if (deque->len != n) {
|
||||
PyErr_SetString(PyExc_IndexError,
|
||||
"deque mutated during remove().");
|
||||
return NULL;
|
||||
}
|
||||
tgt = deque_popleft(deque, NULL);
|
||||
PyObject *tgt = deque_popleft(deque, NULL);
|
||||
assert (tgt != NULL);
|
||||
Py_DECREF(tgt);
|
||||
if (_deque_rotate(deque, i) == -1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue