Kaydet (Commit) d73202c5 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Apply remove's mutation test after every equality test.

üst 4aec61e0
...@@ -19,11 +19,12 @@ class BadCmp: ...@@ -19,11 +19,12 @@ class BadCmp:
raise RuntimeError raise RuntimeError
class MutateCmp: class MutateCmp:
def __init__(self, deque): def __init__(self, deque, result):
self.deque = deque self.deque = deque
self.result = result
def __eq__(self, other): def __eq__(self, other):
self.deque.clear() self.deque.clear()
return True return self.result
class TestBasic(unittest.TestCase): class TestBasic(unittest.TestCase):
...@@ -226,11 +227,11 @@ class TestBasic(unittest.TestCase): ...@@ -226,11 +227,11 @@ class TestBasic(unittest.TestCase):
self.assert_(x is y) self.assert_(x is y)
# Handle evil mutator # Handle evil mutator
d = deque(['ab']) for match in (True, False):
d.extend([MutateCmp(d), 'c']) d = deque(['ab'])
e = deque(d) d.extend([MutateCmp(d, match), 'c'])
self.assertRaises(IndexError, d.remove, 'c') self.assertRaises(IndexError, d.remove, 'c')
self.assertEqual(d, deque()) self.assertEqual(d, deque())
def test_repr(self): def test_repr(self):
d = deque(xrange(200)) d = deque(xrange(200))
......
...@@ -376,14 +376,14 @@ deque_remove(dequeobject *deque, PyObject *value) ...@@ -376,14 +376,14 @@ deque_remove(dequeobject *deque, PyObject *value)
for (i=0 ; i<n ; i++) { for (i=0 ; i<n ; i++) {
PyObject *item = deque->leftblock->data[deque->leftindex]; PyObject *item = deque->leftblock->data[deque->leftindex];
int cmp = PyObject_RichCompareBool(item, value, Py_EQ); 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) { if (cmp > 0) {
PyObject *tgt; PyObject *tgt = deque_popleft(deque, NULL);
if (deque->len != n) {
PyErr_SetString(PyExc_IndexError,
"deque mutated during remove().");
return NULL;
}
tgt = deque_popleft(deque, NULL);
assert (tgt != NULL); assert (tgt != NULL);
Py_DECREF(tgt); Py_DECREF(tgt);
if (_deque_rotate(deque, i) == -1) 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