summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-11-05 08:01:31 (GMT)
committerGitHub <noreply@github.com>2023-11-05 08:01:31 (GMT)
commitfef32a1d08c52e4604a42857ab5dfe8e7b0a12ff (patch)
tree327b1acada5674b6cbf14abbb587a77787772c95 /Modules
parent237b269298bbc2f604b86182597b832b219113d9 (diff)
downloadcpython-fef32a1d08c52e4604a42857ab5dfe8e7b0a12ff.zip
cpython-fef32a1d08c52e4604a42857ab5dfe8e7b0a12ff.tar.gz
cpython-fef32a1d08c52e4604a42857ab5dfe8e7b0a12ff.tar.bz2
[3.12] gh-111495: Add tests for PyFloat C API (GH-111624) (GH-111752)
(cherry picked from commit b452202a11c4cb60f69a098a0076a8a8aabade38) Co-authored-by: Sergey B Kirpichev <skirpichev@gmail.com>
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_testcapi/float.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/Modules/_testcapi/float.c b/Modules/_testcapi/float.c
index 33cbda8..0c26eb9 100644
--- a/Modules/_testcapi/float.c
+++ b/Modules/_testcapi/float.c
@@ -1,9 +1,75 @@
#define PY_SSIZE_T_CLEAN
#include "parts.h"
+#include "util.h"
#include "clinic/float.c.h"
+static PyObject *
+float_check(PyObject *Py_UNUSED(module), PyObject *obj)
+{
+ NULLABLE(obj);
+ return PyLong_FromLong(PyFloat_Check(obj));
+}
+
+static PyObject *
+float_checkexact(PyObject *Py_UNUSED(module), PyObject *obj)
+{
+ NULLABLE(obj);
+ return PyLong_FromLong(PyFloat_CheckExact(obj));
+}
+
+static PyObject *
+float_fromstring(PyObject *Py_UNUSED(module), PyObject *obj)
+{
+ NULLABLE(obj);
+ return PyFloat_FromString(obj);
+}
+
+static PyObject *
+float_fromdouble(PyObject *Py_UNUSED(module), PyObject *obj)
+{
+ double d;
+
+ if (!PyArg_Parse(obj, "d", &d)) {
+ return NULL;
+ }
+
+ return PyFloat_FromDouble(d);
+}
+
+static PyObject *
+float_asdouble(PyObject *Py_UNUSED(module), PyObject *obj)
+{
+ double d;
+
+ NULLABLE(obj);
+ d = PyFloat_AsDouble(obj);
+ if (d == -1. && PyErr_Occurred()) {
+ return NULL;
+ }
+
+ return PyFloat_FromDouble(d);
+}
+
+static PyObject *
+float_getinfo(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(arg))
+{
+ return PyFloat_GetInfo();
+}
+
+static PyObject *
+float_getmax(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(arg))
+{
+ return PyFloat_FromDouble(PyFloat_GetMax());
+}
+
+static PyObject *
+float_getmin(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(arg))
+{
+ return PyFloat_FromDouble(PyFloat_GetMin());
+}
+
/*[clinic input]
module _testcapi
[clinic start generated code]*/
@@ -98,6 +164,14 @@ _testcapi_float_unpack_impl(PyObject *module, const char *data,
}
static PyMethodDef test_methods[] = {
+ {"float_check", float_check, METH_O},
+ {"float_checkexact", float_checkexact, METH_O},
+ {"float_fromstring", float_fromstring, METH_O},
+ {"float_fromdouble", float_fromdouble, METH_O},
+ {"float_asdouble", float_asdouble, METH_O},
+ {"float_getinfo", float_getinfo, METH_NOARGS},
+ {"float_getmax", float_getmax, METH_NOARGS},
+ {"float_getmin", float_getmin, METH_NOARGS},
_TESTCAPI_FLOAT_PACK_METHODDEF
_TESTCAPI_FLOAT_UNPACK_METHODDEF
{NULL},