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 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