Commit d73202c5 authored by Raymond Hettinger's avatar Raymond Hettinger

Apply remove's mutation test after every equality test.

parent 4aec61e0
......@@ -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,9 +227,9 @@ class TestBasic(unittest.TestCase):
self.assert_(x is y)
# Handle evil mutator
for match in (True, False):
d = deque(['ab'])
d.extend([MutateCmp(d), 'c'])
e = deque(d)
d.extend([MutateCmp(d, match), 'c'])
self.assertRaises(IndexError, d.remove, 'c')
self.assertEqual(d, deque())
......
......@@ -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 (cmp > 0) {
PyObject *tgt;
if (deque->len != n) {
PyErr_SetString(PyExc_IndexError,
"deque mutated during remove().");
return NULL;
}
tgt = deque_popleft(deque, NULL);
if (cmp > 0) {
PyObject *tgt = deque_popleft(deque, NULL);
assert (tgt != NULL);
Py_DECREF(tgt);
if (_deque_rotate(deque, i) == -1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment