1*40840afaSBenjamin Berg // SPDX-License-Identifier: GPL-2.0-only 2*40840afaSBenjamin Berg /* 3*40840afaSBenjamin Berg * KUnit tests for utilities 4*40840afaSBenjamin Berg * 5*40840afaSBenjamin Berg * Copyright (C) 2024-2025 Intel Corporation 6*40840afaSBenjamin Berg */ 7*40840afaSBenjamin Berg #include "../iwl-utils.h" 8*40840afaSBenjamin Berg #include <kunit/test.h> 9*40840afaSBenjamin Berg 10*40840afaSBenjamin Berg MODULE_IMPORT_NS("IWLWIFI"); 11*40840afaSBenjamin Berg 12*40840afaSBenjamin Berg static const struct average_neg_db_case { 13*40840afaSBenjamin Berg const char *desc; 14*40840afaSBenjamin Berg u8 neg_dbm[22]; 15*40840afaSBenjamin Berg s8 result; 16*40840afaSBenjamin Berg } average_neg_db_cases[] = { 17*40840afaSBenjamin Berg { 18*40840afaSBenjamin Berg .desc = "Smallest possible value, all filled", 19*40840afaSBenjamin Berg .neg_dbm = { 20*40840afaSBenjamin Berg 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 21*40840afaSBenjamin Berg 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 22*40840afaSBenjamin Berg 128, 128 23*40840afaSBenjamin Berg }, 24*40840afaSBenjamin Berg .result = -128, 25*40840afaSBenjamin Berg }, 26*40840afaSBenjamin Berg { 27*40840afaSBenjamin Berg .desc = "Biggest possible value, all filled", 28*40840afaSBenjamin Berg .neg_dbm = { 29*40840afaSBenjamin Berg 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30*40840afaSBenjamin Berg 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31*40840afaSBenjamin Berg 0, 0, 32*40840afaSBenjamin Berg }, 33*40840afaSBenjamin Berg .result = 0, 34*40840afaSBenjamin Berg }, 35*40840afaSBenjamin Berg { 36*40840afaSBenjamin Berg .desc = "Smallest possible value, partial filled", 37*40840afaSBenjamin Berg .neg_dbm = { 38*40840afaSBenjamin Berg 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 39*40840afaSBenjamin Berg 0xff, 0xff, 0xff, 0xff, 0xff, 40*40840afaSBenjamin Berg 0xff, 0xff, 0xff, 0xff, 0xff, 41*40840afaSBenjamin Berg 0xff, 0xff, 42*40840afaSBenjamin Berg }, 43*40840afaSBenjamin Berg .result = -128, 44*40840afaSBenjamin Berg }, 45*40840afaSBenjamin Berg { 46*40840afaSBenjamin Berg .desc = "Biggest possible value, partial filled", 47*40840afaSBenjamin Berg .neg_dbm = { 48*40840afaSBenjamin Berg 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49*40840afaSBenjamin Berg 0xff, 0xff, 0xff, 0xff, 0xff, 50*40840afaSBenjamin Berg 0xff, 0xff, 0xff, 0xff, 0xff, 51*40840afaSBenjamin Berg 0xff, 0xff, 52*40840afaSBenjamin Berg }, 53*40840afaSBenjamin Berg .result = 0, 54*40840afaSBenjamin Berg }, 55*40840afaSBenjamin Berg { 56*40840afaSBenjamin Berg .desc = "Adding -80dBm to -75dBm until it is still rounded to -79dBm", 57*40840afaSBenjamin Berg .neg_dbm = { 58*40840afaSBenjamin Berg 75, 80, 80, 80, 80, 80, 80, 80, 80, 80, 59*40840afaSBenjamin Berg 80, 80, 80, 80, 80, 80, 80, 0xff, 0xff, 0xff, 60*40840afaSBenjamin Berg 0xff, 0xff, 61*40840afaSBenjamin Berg }, 62*40840afaSBenjamin Berg .result = -79, 63*40840afaSBenjamin Berg }, 64*40840afaSBenjamin Berg { 65*40840afaSBenjamin Berg .desc = "Adding -80dBm to -75dBm until it is just rounded to -80dBm", 66*40840afaSBenjamin Berg .neg_dbm = { 67*40840afaSBenjamin Berg 75, 80, 80, 80, 80, 80, 80, 80, 80, 80, 68*40840afaSBenjamin Berg 80, 80, 80, 80, 80, 80, 80, 80, 0xff, 0xff, 69*40840afaSBenjamin Berg 0xff, 0xff, 70*40840afaSBenjamin Berg }, 71*40840afaSBenjamin Berg .result = -80, 72*40840afaSBenjamin Berg }, 73*40840afaSBenjamin Berg }; 74*40840afaSBenjamin Berg 75*40840afaSBenjamin Berg KUNIT_ARRAY_PARAM_DESC(average_neg_db, average_neg_db_cases, desc) 76*40840afaSBenjamin Berg 77*40840afaSBenjamin Berg static void test_average_neg_db(struct kunit *test) 78*40840afaSBenjamin Berg { 79*40840afaSBenjamin Berg const struct average_neg_db_case *params = test->param_value; 80*40840afaSBenjamin Berg u8 reversed[ARRAY_SIZE(params->neg_dbm)]; 81*40840afaSBenjamin Berg int i; 82*40840afaSBenjamin Berg 83*40840afaSBenjamin Berg /* Test the values in the given order */ 84*40840afaSBenjamin Berg KUNIT_ASSERT_EQ(test, 85*40840afaSBenjamin Berg iwl_average_neg_dbm(params->neg_dbm, 86*40840afaSBenjamin Berg ARRAY_SIZE(params->neg_dbm)), 87*40840afaSBenjamin Berg params->result); 88*40840afaSBenjamin Berg 89*40840afaSBenjamin Berg /* Test in reverse order */ 90*40840afaSBenjamin Berg for (i = 0; i < ARRAY_SIZE(params->neg_dbm); i++) 91*40840afaSBenjamin Berg reversed[ARRAY_SIZE(params->neg_dbm) - i - 1] = 92*40840afaSBenjamin Berg params->neg_dbm[i]; 93*40840afaSBenjamin Berg KUNIT_ASSERT_EQ(test, 94*40840afaSBenjamin Berg iwl_average_neg_dbm(reversed, 95*40840afaSBenjamin Berg ARRAY_SIZE(params->neg_dbm)), 96*40840afaSBenjamin Berg params->result); 97*40840afaSBenjamin Berg } 98*40840afaSBenjamin Berg 99*40840afaSBenjamin Berg static struct kunit_case average_db_case[] = { 100*40840afaSBenjamin Berg KUNIT_CASE_PARAM(test_average_neg_db, average_neg_db_gen_params), 101*40840afaSBenjamin Berg {} 102*40840afaSBenjamin Berg }; 103*40840afaSBenjamin Berg 104*40840afaSBenjamin Berg static struct kunit_suite average_db = { 105*40840afaSBenjamin Berg .name = "iwl-average-db", 106*40840afaSBenjamin Berg .test_cases = average_db_case, 107*40840afaSBenjamin Berg }; 108*40840afaSBenjamin Berg 109*40840afaSBenjamin Berg kunit_test_suite(average_db); 110