xref: /src/lib/libc/tests/stdbit/stdbit-test-framework.c (revision 2fb8cbc6ef1b3cc6cd60e5db07f8305623f9b044)
12fb8cbc6SRobert Clausecker /*
22fb8cbc6SRobert Clausecker  * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
32fb8cbc6SRobert Clausecker  *
42fb8cbc6SRobert Clausecker  * SPDX-License-Identifier: BSD-2-Clause
52fb8cbc6SRobert Clausecker  */
62fb8cbc6SRobert Clausecker 
72fb8cbc6SRobert Clausecker /*
82fb8cbc6SRobert Clausecker  * Test framework for stdbit functions.
92fb8cbc6SRobert Clausecker  * Requires the following macros to be defined:
102fb8cbc6SRobert Clausecker  *
112fb8cbc6SRobert Clausecker  * FUNCSTEM -- name of the function without type suffix
122fb8cbc6SRobert Clausecker  * MKREFFUNC(name, type) -- macro to generate a reference
132fb8cbc6SRobert Clausecker  *   implementation of the function as a static function
142fb8cbc6SRobert Clausecker  *   named name with give argument type.
152fb8cbc6SRobert Clausecker  */
162fb8cbc6SRobert Clausecker 
172fb8cbc6SRobert Clausecker #include <sys/cdefs.h>
182fb8cbc6SRobert Clausecker #include <atf-c.h>
192fb8cbc6SRobert Clausecker #include <limits.h>
202fb8cbc6SRobert Clausecker #include <stdbit.h>
212fb8cbc6SRobert Clausecker #include <stdint.h>
222fb8cbc6SRobert Clausecker 
232fb8cbc6SRobert Clausecker #define ATF_TC_WITHOUT_HEAD1(stem, suffix) ATF_TC_WITHOUT_HEAD2(__CONCAT(stem, suffix))
242fb8cbc6SRobert Clausecker #define ATF_TC_WITHOUT_HEAD2(case) ATF_TC_WITHOUT_HEAD(case)
252fb8cbc6SRobert Clausecker #define ATF_TC_BODY1(stem, suffix, tc) ATF_TC_BODY2(__CONCAT(stem, suffix), tc)
262fb8cbc6SRobert Clausecker #define ATF_TC_BODY2(case, tc) ATF_TC_BODY(case, tc)
272fb8cbc6SRobert Clausecker 
282fb8cbc6SRobert Clausecker #define SUFFIX _uc
292fb8cbc6SRobert Clausecker #define TYPE unsigned char
302fb8cbc6SRobert Clausecker #define TYPE_WIDTH UCHAR_WIDTH
312fb8cbc6SRobert Clausecker #include "stdbit-test-kernel.c"
322fb8cbc6SRobert Clausecker #undef TYPE_WIDTH
332fb8cbc6SRobert Clausecker #undef TYPE
342fb8cbc6SRobert Clausecker #undef SUFFIX
352fb8cbc6SRobert Clausecker 
362fb8cbc6SRobert Clausecker #define SUFFIX _us
372fb8cbc6SRobert Clausecker #define TYPE unsigned short
382fb8cbc6SRobert Clausecker #define TYPE_WIDTH USHRT_WIDTH
392fb8cbc6SRobert Clausecker #include "stdbit-test-kernel.c"
402fb8cbc6SRobert Clausecker #undef TYPE_WIDTH
412fb8cbc6SRobert Clausecker #undef TYPE
422fb8cbc6SRobert Clausecker #undef SUFFIX
432fb8cbc6SRobert Clausecker 
442fb8cbc6SRobert Clausecker #define SUFFIX _ui
452fb8cbc6SRobert Clausecker #define TYPE unsigned int
462fb8cbc6SRobert Clausecker #define TYPE_WIDTH UINT_WIDTH
472fb8cbc6SRobert Clausecker #include "stdbit-test-kernel.c"
482fb8cbc6SRobert Clausecker #undef TYPE_WIDTH
492fb8cbc6SRobert Clausecker #undef TYPE
502fb8cbc6SRobert Clausecker #undef SUFFIX
512fb8cbc6SRobert Clausecker 
522fb8cbc6SRobert Clausecker #define SUFFIX _ul
532fb8cbc6SRobert Clausecker #define TYPE unsigned long
542fb8cbc6SRobert Clausecker #define TYPE_WIDTH ULONG_WIDTH
552fb8cbc6SRobert Clausecker #include "stdbit-test-kernel.c"
562fb8cbc6SRobert Clausecker #undef TYPE_WIDTH
572fb8cbc6SRobert Clausecker #undef TYPE
582fb8cbc6SRobert Clausecker #undef SUFFIX
592fb8cbc6SRobert Clausecker 
602fb8cbc6SRobert Clausecker #define SUFFIX _ull
612fb8cbc6SRobert Clausecker #define TYPE unsigned long long
622fb8cbc6SRobert Clausecker #define TYPE_WIDTH ULLONG_WIDTH
632fb8cbc6SRobert Clausecker #include "stdbit-test-kernel.c"
642fb8cbc6SRobert Clausecker #undef TYPE_WIDTH
652fb8cbc6SRobert Clausecker #undef TYPE
662fb8cbc6SRobert Clausecker #undef SUFFIX
672fb8cbc6SRobert Clausecker 
682fb8cbc6SRobert Clausecker #define ADD_CASE(stem, suffix) ADD_CASE1(__CONCAT(stem, suffix))
692fb8cbc6SRobert Clausecker #define ADD_CASE1(case) ATF_TP_ADD_TC(tp, case)
702fb8cbc6SRobert Clausecker 
ATF_TP_ADD_TCS(tp)712fb8cbc6SRobert Clausecker ATF_TP_ADD_TCS(tp)
722fb8cbc6SRobert Clausecker {
732fb8cbc6SRobert Clausecker 	ADD_CASE(FUNCSTEM, _uc);
742fb8cbc6SRobert Clausecker 	ADD_CASE(FUNCSTEM, _us);
752fb8cbc6SRobert Clausecker 	ADD_CASE(FUNCSTEM, _ui);
762fb8cbc6SRobert Clausecker 	ADD_CASE(FUNCSTEM, _ul);
772fb8cbc6SRobert Clausecker 	ADD_CASE(FUNCSTEM, _ull);
782fb8cbc6SRobert Clausecker 
792fb8cbc6SRobert Clausecker 	return (atf_no_error());
802fb8cbc6SRobert Clausecker }
81