LCOV - code coverage report
Current view: | top level - Modules/_testcapi - float.c (source / functions) |  |  | Hit | Total | Coverage
Test: | CPython 3.12 LCOV report [commit 5e6661bce9] |  | Lines: | 3 | 43 | 7.0 %
Date: | 2023-03-20 08:15:36 |  | Functions: | 1 | 3 | 33.3 %
|  |  | Branches: | 1 | 26 | 3.8 %

               Branch data     Line data    Source code
           1                 :            : #define PY_SSIZE_T_CLEAN
           2                 :            :
           3                 :            : #include "parts.h"
           4                 :            :
           5                 :            :
           6                 :            : // Test PyFloat_Pack2(), PyFloat_Pack4() and PyFloat_Pack8()
           7                 :            : static PyObject *
           8                 :          0 : test_float_pack(PyObject *self, PyObject *args)
           9                 :            : {
          10                 :            :     int size;
          11                 :            :     double d;
          12                 :            :     int le;
          13         [ #  # ]:          0 :     if (!PyArg_ParseTuple(args, "idi", &size, &d, &le)) {
          14                 :          0 :         return NULL;
          15                 :            :     }
          16   [ #  #  #  # ]:          0 :     switch (size)
          17                 :            :     {
          18                 :          0 :     case 2:
          19                 :            :     {
          20                 :            :         char data[2];
          21         [ #  # ]:          0 :         if (PyFloat_Pack2(d, data, le) < 0) {
          22                 :          0 :             return NULL;
          23                 :            :         }
          24                 :          0 :         return PyBytes_FromStringAndSize(data, Py_ARRAY_LENGTH(data));
          25                 :            :     }
          26                 :          0 :     case 4:
          27                 :            :     {
          28                 :            :         char data[4];
          29         [ #  # ]:          0 :         if (PyFloat_Pack4(d, data, le) < 0) {
          30                 :          0 :             return NULL;
          31                 :            :         }
          32                 :          0 :         return PyBytes_FromStringAndSize(data, Py_ARRAY_LENGTH(data));
          33                 :            :     }
          34                 :          0 :     case 8:
          35                 :            :     {
          36                 :            :         char data[8];
          37         [ #  # ]:          0 :         if (PyFloat_Pack8(d, data, le) < 0) {
          38                 :          0 :             return NULL;
          39                 :            :         }
          40                 :          0 :         return PyBytes_FromStringAndSize(data, Py_ARRAY_LENGTH(data));
          41                 :            :     }
          42                 :          0 :     default: break;
          43                 :            :     }
          44                 :            :
          45                 :          0 :     PyErr_SetString(PyExc_ValueError, "size must 2, 4 or 8");
          46                 :          0 :     return NULL;
          47                 :            : }
          48                 :            :
          49                 :            :
          50                 :            : // Test PyFloat_Unpack2(), PyFloat_Unpack4() and PyFloat_Unpack8()
          51                 :            : static PyObject *
          52                 :          0 : test_float_unpack(PyObject *self, PyObject *args)
          53                 :            : {
          54         [ #  # ]:          0 :     assert(!PyErr_Occurred());
          55                 :            :     const char *data;
          56                 :            :     Py_ssize_t size;
          57                 :            :     int le;
          58         [ #  # ]:          0 :     if (!PyArg_ParseTuple(args, "y#i", &data, &size, &le)) {
          59                 :          0 :         return NULL;
          60                 :            :     }
          61                 :            :     double d;
          62   [ #  #  #  # ]:          0 :     switch (size)
          63                 :            :     {
          64                 :          0 :     case 2:
          65                 :          0 :         d = PyFloat_Unpack2(data, le);
          66                 :          0 :         break;
          67                 :          0 :     case 4:
          68                 :          0 :         d = PyFloat_Unpack4(data, le);
          69                 :          0 :         break;
          70                 :          0 :     case 8:
          71                 :          0 :         d = PyFloat_Unpack8(data, le);
          72                 :          0 :         break;
          73                 :          0 :     default:
          74                 :          0 :         PyErr_SetString(PyExc_ValueError, "data length must 2, 4 or 8 bytes");
          75                 :          0 :         return NULL;
          76                 :            :     }
          77                 :            :
          78   [ #  #  #  # ]:          0 :     if (d == -1.0 && PyErr_Occurred()) {
          79                 :          0 :         return NULL;
          80                 :            :     }
          81                 :          0 :     return PyFloat_FromDouble(d);
          82                 :            : }
          83                 :            :
          84                 :            : static PyMethodDef test_methods[] = {
          85                 :            :     {"float_pack", test_float_pack, METH_VARARGS, NULL},
          86                 :            :     {"float_unpack", test_float_unpack, METH_VARARGS, NULL},
          87                 :            :     {NULL},
          88                 :            : };
          89                 :            :
          90                 :            : int
          91                 :          2 : _PyTestCapi_Init_Float(PyObject *mod)
          92                 :            : {
          93         [ -  + ]:          2 :     if (PyModule_AddFunctions(mod, test_methods) < 0) {
          94                 :          0 :         return -1;
          95                 :            :     }
          96                 :            :
          97                 :          2 :     return 0;
          98                 :            : }

Generated by: LCOV version 1.14