Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : :
3 : : #include <stdio.h>
4 : : #include <stdlib.h>
5 : : #include <string.h>
6 : :
7 : : typedef const char* (*lookup_t)(int);
8 : : typedef int (*reverse_t)(const char*);
9 : :
10 : 496 : static inline void _test_table(const char *name,
11 : : lookup_t lookup,
12 : : reverse_t reverse,
13 : : int size,
14 : : bool sparse) {
15 : 496 : int i, boring = 0;
16 : :
17 [ + + ]: 152352 : for (i = -1; i < size + 1; i++) {
18 : 151856 : const char* val = lookup(i);
19 : : int rev;
20 : :
21 [ + + ]: 151856 : if (val) {
22 : 3748 : rev = reverse(val);
23 : 3748 : boring = 0;
24 : : } else {
25 : 148108 : rev = reverse("--no-such--value----");
26 : 148108 : boring += i >= 0;
27 : : }
28 : :
29 [ + + + + ]: 151856 : if (boring < 1 || i == size)
30 : 4740 : printf("%s: %d → %s → %d\n", name, i, val, rev);
31 [ + + ]: 147116 : else if (boring == 1)
32 : 52 : printf("%*s ...\n", (int) strlen(name), "");
33 : :
34 [ + + + + : 151856 : assert_se(!(i >= 0 && i < size ?
+ + + + -
+ + - - +
+ - - + -
+ ]
35 : : sparse ? rev != i && rev != -1 : val == NULL || rev != i :
36 : : val != NULL || rev != -1));
37 : : }
38 : 496 : }
39 : :
40 : : #define test_table(lower, upper) \
41 : : _test_table(STRINGIFY(lower), lower##_to_string, lower##_from_string, _##upper##_MAX, false)
42 : :
43 : : #define test_table_sparse(lower, upper) \
44 : : _test_table(STRINGIFY(lower), lower##_to_string, lower##_from_string, _##upper##_MAX, true)
|