Author: alex.martelli
Date: Thu Aug 23 00:39:42 2007
New Revision: 57296
Modified:
python/branches/py3k/Lib/test/test_builtin.py
python/branches/py3k/Python/bltinmodule.c
Log:
Implement the trunc builtin for PEP 3141
Modified: python/branches/py3k/Lib/test/test_builtin.py
==============================================================================
--- python/branches/py3k/Lib/test/test_builtin.py (original)
+++ python/branches/py3k/Lib/test/test_builtin.py Thu Aug 23 00:39:42 2007
@@ -1515,6 +1515,20 @@
raise ValueError
self.assertRaises(ValueError, sum, BadSeq())
+ def test_trunc(self):
+ class TestTrunc:
+ def __trunc__(self):
+ return 23
+
+ class TestNoTrunc:
+ pass
+
+ self.assertEqual(trunc(TestTrunc()), 23)
+
+ self.assertRaises(TypeError, trunc)
+ self.assertRaises(TypeError, trunc, 1, 2)
+ self.assertRaises(TypeError, trunc, TestNoTrunc())
+
def test_tuple(self):
self.assertEqual(tuple(()), ())
t0_3 = (0, 1, 2, 3)
Modified: python/branches/py3k/Python/bltinmodule.c
==============================================================================
--- python/branches/py3k/Python/bltinmodule.c (original)
+++ python/branches/py3k/Python/bltinmodule.c Thu Aug 23 00:39:42 2007
@@ -1486,6 +1486,27 @@
Without arguments, equivalent to locals().\n\
With an argument, equivalent to object.__dict__.");
+static PyObject *
+builtin_trunc(PyObject *self, PyObject *v)
+{
+ PyObject *res;
+ PyObject *d = PyObject_GetAttrString(v, "__trunc__");
+ if (d == NULL) {
+ PyErr_SetString(PyExc_TypeError,
+ "trunc() argument must have __trunc__ attribute");
+ return NULL;
+ }
+ res = PyObject_CallFunction(d, "");
+ Py_DECREF(d);
+ return res;
+}
+
+PyDoc_STRVAR(trunc_doc,
+"trunc(Real) -> Integral\n\
+\n\
+returns the integral closest to x between 0 and x.");
+
+
static PyObject*
builtin_sum(PyObject *self, PyObject *args)
@@ -1659,6 +1680,7 @@
{"sorted", (PyCFunction)builtin_sorted, METH_VARARGS |
METH_KEYWORDS, sorted_doc},
{"sum", builtin_sum, METH_VARARGS, sum_doc},
{"vars", builtin_vars, METH_VARARGS, vars_doc},
+ {"trunc", builtin_trunc, METH_O, trunc_doc},
{"zip", builtin_zip, METH_VARARGS, zip_doc},
{NULL, NULL},
};
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins