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