/ tests / lib / hexstrtobin-test.c
hexstrtobin-test.c
 1  /* SPDX-License-Identifier: GPL-2.0-only */
 2  
 3  #include <stdlib.h>
 4  #include <string.h>
 5  #include <lib.h>
 6  #include <stdint.h>
 7  #include <tests/test.h>
 8  
 9  struct hexstr_t {
10  	char *str;
11  	int *val;
12  	size_t res;
13  } hexstr[] = {
14  	{.str = "A", .res = 0},
15  	{.str = "AB", .val = (int[]){171}, .res = 1},
16  	{.str = "277a", .val = (int[]){39, 122}, .res = 2},
17  	{.str = "277ab", .val = (int[]){39, 122}, .res = 2},
18  	{.str = "\n\rx1234567ijkl", .val = (int[]){18, 52, 86}, .res = 3},
19  	{.str = "\nB*e/ef-", .val = (int[]){190, 239}, .res = 2},
20  };
21  
22  static void test_hexstrtobin(void **state)
23  {
24  	uint8_t *buf;
25  	size_t res, len;
26  
27  	for (int i = 0; i < ARRAY_SIZE(hexstr); i++) {
28  		len = strlen(hexstr[i].str) / 2 + 1;
29  		buf = malloc(len);
30  		res = hexstrtobin(hexstr[i].str, buf, len);
31  
32  		assert_int_equal(hexstr[i].res, res);
33  
34  		for (int j = 0; j < res; j++)
35  			assert_int_equal(hexstr[i].val[j], buf[j]);
36  
37  		free(buf);
38  	}
39  }
40  
41  int main(void)
42  {
43  	const struct CMUnitTest tests[] = {
44  		cmocka_unit_test(test_hexstrtobin),
45  	};
46  
47  	return cb_run_group_tests(tests, NULL, NULL);
48  }