diff options
| -rw-r--r-- | Lib/test/test_builtin.py | 14 | ||||
| -rw-r--r-- | Python/bltinmodule.c | 22 | 
2 files changed, 36 insertions, 0 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index b3e4733804..d5fc85fe3e 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1515,6 +1515,20 @@ class BuiltinTest(unittest.TestCase):                  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) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index ce8b7f50b1..2c163a16e8 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1486,6 +1486,27 @@ PyDoc_STRVAR(vars_doc,  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 @@ static PyMethodDef builtin_methods[] = {   	{"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},  };  | 
