dal-c library ← coverage

§ Coverage

src/sc_lut.c

1/*2 * sc_lut.c -- implementation. Blocks are tagged with the low-level3 * requirement they satisfy; see requirements/sc_lut.md.4 */5#include "sc_lut.h"6#include "sc_sat.h"786sc_status_t sc_lut_valid(const sc_lut_t *lut)9{106    sc_status_t status = SC_OK;11126    if ((lut == NULL) || (lut->x == NULL) || (lut->y == NULL))condition outcomes covered 6/613    {143        status = SC_ERR_NULL;                        /* LLR-LUT-8 */15    }163    else if (lut->n < 2u)condition outcomes covered 2/217    {181        status = SC_ERR_PARAM;                       /* LLR-LUT-9 */19    }20    else21    {22        uint32_t i;237        for (i = 0u; (i + 1u) < lut->n; i++)         /* LLR-LUT-10 */condition outcomes covered 2/224        {255            if (lut->x[i + 1u] <= lut->x[i])condition outcomes covered 2/226            {271                status = SC_ERR_PARAM;               /* not strictly increasing */28            }29        }30    }31326    return status;33}343514int32_t sc_lut_eval(const sc_lut_t *lut, int32_t x)36{37    int32_t result;383914    if (lut == NULL)condition outcomes covered 2/240    {411        result = 0;                                  /* LLR-LUT-7 */42    }4313    else if (x <= lut->x[0])condition outcomes covered 2/244    {452        result = lut->y[0];                          /* LLR-LUT-1: clamp low */46    }47    else48    {4911        uint32_t i = 0u;505127        while ((i + 1u) < lut->n)                    /* LLR-LUT-3: find segment */condition outcomes covered 2/252        {5325            if (x < lut->x[i + 1u])condition outcomes covered 2/254            {559                break;56            }5716            i++;58        }596011        if ((i + 1u) >= lut->n)condition outcomes covered 2/261        {622            result = lut->y[lut->n - 1u];            /* LLR-LUT-2: clamp high */63        }64        else65        {669            int64_t span   = (int64_t)lut->x[i + 1u] - (int64_t)lut->x[i]; /* > 0 */679            int64_t step   = (int64_t)lut->y[i + 1u] - (int64_t)lut->y[i]; /* LLR-LUT-4 */689            int64_t offset = (step * ((int64_t)x - (int64_t)lut->x[i])) / span; /* LLR-LUT-5 */69709            result = sc_sat_add_i32(lut->y[i], (int32_t)offset);          /* LLR-LUT-6 */71        }72    }737414    return result;75}