[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

AltStyle によって変換されたページ (->オリジナル) /