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