[Python-checkins] python/nondist/sandbox/setobj setobject.c, 1.9, 1.10 test_set.py, 1.9, 1.10

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Thu Nov 13 18:18:37 EST 2003


Update of /cvsroot/python/python/nondist/sandbox/setobj
In directory sc8-pr-cvs1:/tmp/cvs-serv12829
Modified Files:
	setobject.c test_set.py 
Log Message:
Add clear(), add(), remove(), and discard().
Index: setobject.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/setobj/setobject.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** setobject.c	13 Nov 2003 22:23:58 -0000	1.9
--- setobject.c	13 Nov 2003 23:18:34 -0000	1.10
***************
*** 412,416 ****
 
 static PyObject *
! set_richcompare(PyObject *v, PyObject *w, int op)
 {
 	PyObject *res;
--- 412,416 ----
 
 static PyObject *
! set_richcompare(setobject *v, PyObject *w, int op)
 {
 	PyObject *res;
***************
*** 462,465 ****
--- 462,517 ----
 }
 
+ static PyObject *
+ set_clear(setobject *so)
+ {
+ 	PyDict_Clear(so->data);
+ 	Py_INCREF(Py_None);
+ 	return Py_None;
+ }
+ 
+ PyDoc_STRVAR(clear_doc, "Remove all elements from this set.");
+ 
+ static PyObject *
+ set_add(setobject *so, PyObject *item)
+ {
+ 	if (PyDict_SetItem(so->data, item, Py_True) == -1)
+ 		return NULL;
+ 	Py_INCREF(Py_None);
+ 	return Py_None;
+ }
+ 
+ PyDoc_STRVAR(add_doc, 
+ "Add an element to a set.\n\
+ \n\
+ This has no effect if the element is already present.");
+ 
+ static PyObject *
+ set_remove(setobject *so, PyObject *item)
+ {
+ 	if (PyDict_DelItem(so->data, item) == -1)
+ 		return NULL;
+ 	Py_INCREF(Py_None);
+ 	return Py_None;
+ }
+ 
+ PyDoc_STRVAR(remove_doc,
+ "Remove an element from a set; it must be a member.\n\
+ \n\
+ If the element is not a member, raise a KeyError.");
+ 
+ static PyObject *
+ set_discard(setobject *so, PyObject *item)
+ {
+ 	if (PyDict_DelItem(so->data, item) == -1)
+ 		PyErr_Clear();
+ 	Py_INCREF(Py_None);
+ 	return Py_None;
+ }
+ 
+ PyDoc_STRVAR(discard_doc,
+ "Remove an element from a set if it is a member.\n\
+ \n\
+ If the element is not a member, do nothing."); 
+ 
 static PySequenceMethods set_as_sequence = {
 	(inquiry)set_len,		/* sq_length */
***************
*** 476,491 ****
 
 static PyMethodDef set_methods[] = {
 	{"copy",	(PyCFunction)set_copy,		METH_NOARGS,
 	 copy_doc},
 	{"__copy__",	(PyCFunction)set_copy,		METH_NOARGS,
 	 copy_doc},
! 	{"difference",(PyCFunction)set_difference,	METH_O,
 	 difference_doc},
 	{"intersection",(PyCFunction)set_intersection,	METH_O,
 	 intersection_doc},
! 	{"issubset",(PyCFunction)set_issubset,		METH_O,
 	 issubset_doc},
! 	{"issuperset",(PyCFunction)set_issuperset,	METH_O,
 	 issuperset_doc},
 	{"symmetric_difference",(PyCFunction)set_symmetric_difference,	METH_O,
 	 symmetric_difference_doc},
--- 528,551 ----
 
 static PyMethodDef set_methods[] = {
+ 	{"add",		(PyCFunction)set_add,		METH_O,
+ 	 add_doc},
+ 	{"clear",	(PyCFunction)set_clear,		METH_NOARGS,
+ 	 clear_doc},
 	{"copy",	(PyCFunction)set_copy,		METH_NOARGS,
 	 copy_doc},
 	{"__copy__",	(PyCFunction)set_copy,		METH_NOARGS,
 	 copy_doc},
! 	{"discard",	(PyCFunction)set_discard,	METH_O,
! 	 discard_doc},
! 	{"difference",	(PyCFunction)set_difference,	METH_O,
 	 difference_doc},
 	{"intersection",(PyCFunction)set_intersection,	METH_O,
 	 intersection_doc},
! 	{"issubset",	(PyCFunction)set_issubset,	METH_O,
 	 issubset_doc},
! 	{"issuperset",	(PyCFunction)set_issuperset,	METH_O,
 	 issuperset_doc},
+ 	{"remove",	(PyCFunction)set_remove,	METH_O,
+ 	 remove_doc},
 	{"symmetric_difference",(PyCFunction)set_symmetric_difference,	METH_O,
 	 symmetric_difference_doc},
Index: test_set.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/setobj/test_set.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** test_set.py	13 Nov 2003 22:23:58 -0000	1.9
--- test_set.py	13 Nov 2003 23:18:34 -0000	1.10
***************
*** 121,124 ****
--- 121,142 ----
 self.assertRaises(TypeError, hash, self.s)
 
+ def test_clear(self):
+ self.s.clear()
+ self.assertEqual(self.s, set([]))
+ 
+ def test_add(self):
+ self.s.add('Q')
+ self.assert_('Q' in self.s)
+ 
+ def test_remove(self):
+ self.s.remove('a')
+ self.assert_('a' not in self.s)
+ self.assertRaises(KeyError, self.s.remove, 'Q')
+ 
+ def test_discard(self):
+ self.s.discard('a')
+ self.assert_('a' not in self.s)
+ self.s.discard('Q')
+ 
 class TestFrozenSet(TestJointOps):
 thetype = frozenset


More information about the Python-checkins mailing list

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