[Python-checkins] python/nondist/sandbox/setobj setobject.c, 1.19,
1.20 test_set.py, 1.19, 1.20
rhettinger at users.sourceforge.net
rhettinger at users.sourceforge.net
Sat Nov 15 17:36:22 EST 2003
Update of /cvsroot/python/python/nondist/sandbox/setobj
In directory sc8-pr-cvs1:/tmp/cvs-serv21728
Modified Files:
setobject.c test_set.py
Log Message:
Handle error exits for unhashable elements.
Add related tests.
Index: setobject.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/setobj/setobject.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** setobject.c 15 Nov 2003 21:39:29 -0000 1.19
--- setobject.c 15 Nov 2003 22:36:20 -0000 1.20
***************
*** 55,59 ****
Py_DECREF(it);
Py_DECREF(data);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 55,60 ----
Py_DECREF(it);
Py_DECREF(data);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
***************
*** 160,164 ****
Py_DECREF(it);
Py_DECREF(result);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 161,166 ----
Py_DECREF(it);
Py_DECREF(result);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
***************
*** 192,196 ****
if (PyDict_SetItem(data, item, Py_True) == -1) {
Py_DECREF(it);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 194,199 ----
if (PyDict_SetItem(data, item, Py_True) == -1) {
Py_DECREF(it);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
***************
*** 257,261 ****
Py_DECREF(it);
Py_DECREF(result);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 260,265 ----
Py_DECREF(it);
Py_DECREF(result);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
***************
*** 298,302 ****
Py_DECREF(newdict);
Py_DECREF(it);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 302,307 ----
Py_DECREF(newdict);
Py_DECREF(it);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
***************
*** 364,369 ****
tgtdata = result->data;
while ((item = PyIter_Next(it)) != NULL) {
! if (PyDict_DelItem(tgtdata, item) == -1)
! PyErr_Clear();
Py_DECREF(item);
}
--- 369,382 ----
tgtdata = result->data;
while ((item = PyIter_Next(it)) != NULL) {
! if (PyDict_DelItem(tgtdata, item) == -1) {
! if (PyErr_ExceptionMatches(PyExc_KeyError))
! PyErr_Clear();
! else {
! Py_DECREF(it);
! Py_DECREF(result);
! Py_DECREF(item);
! return NULL;
! }
! }
Py_DECREF(item);
}
***************
*** 392,397 ****
tgtdata = so->data;
while ((item = PyIter_Next(it)) != NULL) {
! if (PyDict_DelItem(tgtdata, item) == -1)
! PyErr_Clear();
Py_DECREF(item);
}
--- 405,417 ----
tgtdata = so->data;
while ((item = PyIter_Next(it)) != NULL) {
! if (PyDict_DelItem(tgtdata, item) == -1) {
! if (PyErr_ExceptionMatches(PyExc_KeyError))
! PyErr_Clear();
! else {
! Py_DECREF(it);
! Py_DECREF(item);
! return NULL;
! }
! }
Py_DECREF(item);
}
***************
*** 466,470 ****
Py_DECREF(otherset);
Py_DECREF(result);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 486,491 ----
Py_DECREF(otherset);
Py_DECREF(result);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
***************
*** 515,519 ****
Py_XDECREF(otherset);
Py_DECREF(it);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 536,541 ----
Py_XDECREF(otherset);
Py_DECREF(it);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
***************
*** 523,527 ****
Py_XDECREF(otherset);
Py_DECREF(it);
! PyErr_SetString(PyExc_ValueError,
"all set entries must be immutable");
return NULL;
--- 545,550 ----
Py_XDECREF(otherset);
Py_DECREF(it);
! Py_DECREF(item);
! PyErr_SetString(PyExc_TypeError,
"all set entries must be immutable");
return NULL;
Index: test_set.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/setobj/test_set.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** test_set.py 15 Nov 2003 21:43:42 -0000 1.19
--- test_set.py 15 Nov 2003 22:36:20 -0000 1.20
***************
*** 32,35 ****
--- 32,36 ----
self.assertEqual(actual, expected)
self.assertRaises(PassThru, self.thetype, check_pass_thru())
+ self.assertRaises(TypeError, self.thetype, [[]])
def test_len(self):
***************
*** 51,54 ****
--- 52,56 ----
self.assertEqual(type(u), self.thetype)
self.assertRaises(PassThru, self.s.union, check_pass_thru())
+ self.assertRaises(TypeError, self.s.union, [[]])
def test_or(self):
***************
*** 87,90 ****
--- 89,93 ----
self.assertEqual(type(i), self.thetype)
self.assertRaises(PassThru, self.s.difference, check_pass_thru())
+ self.assertRaises(TypeError, self.s.difference, [[]])
def test_sub(self):
***************
*** 105,108 ****
--- 108,112 ----
self.assertEqual(type(i), self.thetype)
self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru())
+ self.assertRaises(TypeError, self.s.symmetric_difference, [[]])
def test_xor(self):
***************
*** 186,189 ****
--- 190,194 ----
self.assert_(c in self.s)
self.assertRaises(PassThru, self.s.union_update, check_pass_thru())
+ self.assertRaises(TypeError, self.s.union_update, [[]])
def test_ior(self):
***************
*** 201,204 ****
--- 206,210 ----
self.assert_(c not in self.s)
self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru())
+ self.assertRaises(TypeError, self.s.intersection_update, [[]])
def test_iand(self):
***************
*** 219,222 ****
--- 225,229 ----
self.assert_(c not in self.s)
self.assertRaises(PassThru, self.s.difference_update, check_pass_thru())
+ self.assertRaises(TypeError, self.s.difference_update, [[]])
def test_isub(self):
***************
*** 237,240 ****
--- 244,248 ----
self.assert_(c not in self.s)
self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru())
+ self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]])
def test_ixor(self):
More information about the Python-checkins
mailing list