[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