diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 943bee6e21..8e1e76e081 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -1965,6 +1965,47 @@ unicode_asutf8andsize(PyObject *self, PyObject *args) return Py_BuildValue("(Nn)", result, utf8_len); } +static PyObject * +unicode_bench_asutf8(PyObject *self, PyObject *args) +{ + Py_ssize_t loops; + PyObject *s, *t; + if (!PyArg_ParseTuple(args, "lUU", &loops, &s, &t)) { + return NULL; + } + + for (long i = 0; i < loops; i++) { + PyObject *u = PyNumber_Add(s, t); + assert(u != NULL); + const char *buff = PyUnicode_AsUTF8(u); + assert(buff != NULL); + Py_DECREF(u); + } + + Py_RETURN_NONE; +} + +static PyObject * +unicode_bench_asutf8string(PyObject *self, PyObject *args) +{ + Py_ssize_t loops; + PyObject *s, *t; + if (!PyArg_ParseTuple(args, "lUU", &loops, &s, &t)) { + return NULL; + } + + for (long i = 0; i < loops; i++) { + PyObject *u = PyNumber_Add(s, t); + assert(u != NULL); + PyObject *bytes = PyUnicode_AsUTF8String(u); + assert(bytes != NULL); + Py_DECREF(bytes); + Py_DECREF(u); + } + + Py_RETURN_NONE; +} + static PyObject * unicode_findchar(PyObject *self, PyObject *args) { @@ -5391,6 +5432,8 @@ static PyMethodDef TestMethods[] = { {"unicode_asucs4", unicode_asucs4, METH_VARARGS}, {"unicode_asutf8", unicode_asutf8, METH_VARARGS}, {"unicode_asutf8andsize", unicode_asutf8andsize, METH_VARARGS}, + {"unicode_bench_asutf8", unicode_bench_asutf8, METH_VARARGS}, + {"unicode_bench_asutf8string", unicode_bench_asutf8string, METH_VARARGS}, {"unicode_findchar", unicode_findchar, METH_VARARGS}, {"unicode_copycharacters", unicode_copycharacters, METH_VARARGS}, {"unicode_encodedecimal", unicode_encodedecimal, METH_VARARGS},