mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Implement the trunc builtin for PEP 3141
This commit is contained in:
parent
a62b45c95d
commit
86d8b3497f
2 changed files with 36 additions and 0 deletions
|
@ -1515,6 +1515,20 @@ class BuiltinTest(unittest.TestCase):
|
||||||
raise ValueError
|
raise ValueError
|
||||||
self.assertRaises(ValueError, sum, BadSeq())
|
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):
|
def test_tuple(self):
|
||||||
self.assertEqual(tuple(()), ())
|
self.assertEqual(tuple(()), ())
|
||||||
t0_3 = (0, 1, 2, 3)
|
t0_3 = (0, 1, 2, 3)
|
||||||
|
|
|
@ -1486,6 +1486,27 @@ PyDoc_STRVAR(vars_doc,
|
||||||
Without arguments, equivalent to locals().\n\
|
Without arguments, equivalent to locals().\n\
|
||||||
With an argument, equivalent to object.__dict__.");
|
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*
|
static PyObject*
|
||||||
builtin_sum(PyObject *self, PyObject *args)
|
builtin_sum(PyObject *self, PyObject *args)
|
||||||
|
@ -1659,6 +1680,7 @@ static PyMethodDef builtin_methods[] = {
|
||||||
{"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
|
{"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
|
||||||
{"sum", builtin_sum, METH_VARARGS, sum_doc},
|
{"sum", builtin_sum, METH_VARARGS, sum_doc},
|
||||||
{"vars", builtin_vars, METH_VARARGS, vars_doc},
|
{"vars", builtin_vars, METH_VARARGS, vars_doc},
|
||||||
|
{"trunc", builtin_trunc, METH_O, trunc_doc},
|
||||||
{"zip", builtin_zip, METH_VARARGS, zip_doc},
|
{"zip", builtin_zip, METH_VARARGS, zip_doc},
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue