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