xref: /freebsd/lib/libc/tests/stdbit/stdbit-test-framework.c (revision 2fb8cbc6ef1b3cc6cd60e5db07f8305623f9b044)
1 /*
2  * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
3  *
4  * SPDX-License-Identifier: BSD-2-Clause
5  */
6 
7 /*
8  * Test framework for stdbit functions.
9  * Requires the following macros to be defined:
10  *
11  * FUNCSTEM -- name of the function without type suffix
12  * MKREFFUNC(name, type) -- macro to generate a reference
13  *   implementation of the function as a static function
14  *   named name with give argument type.
15  */
16 
17 #include <sys/cdefs.h>
18 #include <atf-c.h>
19 #include <limits.h>
20 #include <stdbit.h>
21 #include <stdint.h>
22 
23 #define ATF_TC_WITHOUT_HEAD1(stem, suffix) ATF_TC_WITHOUT_HEAD2(__CONCAT(stem, suffix))
24 #define ATF_TC_WITHOUT_HEAD2(case) ATF_TC_WITHOUT_HEAD(case)
25 #define ATF_TC_BODY1(stem, suffix, tc) ATF_TC_BODY2(__CONCAT(stem, suffix), tc)
26 #define ATF_TC_BODY2(case, tc) ATF_TC_BODY(case, tc)
27 
28 #define SUFFIX _uc
29 #define TYPE unsigned char
30 #define TYPE_WIDTH UCHAR_WIDTH
31 #include "stdbit-test-kernel.c"
32 #undef TYPE_WIDTH
33 #undef TYPE
34 #undef SUFFIX
35 
36 #define SUFFIX _us
37 #define TYPE unsigned short
38 #define TYPE_WIDTH USHRT_WIDTH
39 #include "stdbit-test-kernel.c"
40 #undef TYPE_WIDTH
41 #undef TYPE
42 #undef SUFFIX
43 
44 #define SUFFIX _ui
45 #define TYPE unsigned int
46 #define TYPE_WIDTH UINT_WIDTH
47 #include "stdbit-test-kernel.c"
48 #undef TYPE_WIDTH
49 #undef TYPE
50 #undef SUFFIX
51 
52 #define SUFFIX _ul
53 #define TYPE unsigned long
54 #define TYPE_WIDTH ULONG_WIDTH
55 #include "stdbit-test-kernel.c"
56 #undef TYPE_WIDTH
57 #undef TYPE
58 #undef SUFFIX
59 
60 #define SUFFIX _ull
61 #define TYPE unsigned long long
62 #define TYPE_WIDTH ULLONG_WIDTH
63 #include "stdbit-test-kernel.c"
64 #undef TYPE_WIDTH
65 #undef TYPE
66 #undef SUFFIX
67 
68 #define ADD_CASE(stem, suffix) ADD_CASE1(__CONCAT(stem, suffix))
69 #define ADD_CASE1(case) ATF_TP_ADD_TC(tp, case)
70 
ATF_TP_ADD_TCS(tp)71 ATF_TP_ADD_TCS(tp)
72 {
73 	ADD_CASE(FUNCSTEM, _uc);
74 	ADD_CASE(FUNCSTEM, _us);
75 	ADD_CASE(FUNCSTEM, _ui);
76 	ADD_CASE(FUNCSTEM, _ul);
77 	ADD_CASE(FUNCSTEM, _ull);
78 
79 	return (atf_no_error());
80 }
81