1*57718be8SEnji Cooper /* $NetBSD: t_cdefs.c,v 1.3 2013/09/05 09:01:27 gsutre Exp $ */ 2*57718be8SEnji Cooper 3*57718be8SEnji Cooper /*- 4*57718be8SEnji Cooper * Copyright (c) 2012 The NetBSD Foundation, Inc. 5*57718be8SEnji Cooper * All rights reserved. 6*57718be8SEnji Cooper * 7*57718be8SEnji Cooper * This code is derived from software contributed to The NetBSD Foundation 8*57718be8SEnji Cooper * by Christos Zoulas. 9*57718be8SEnji Cooper * 10*57718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without 11*57718be8SEnji Cooper * modification, are permitted provided that the following conditions 12*57718be8SEnji Cooper * are met: 13*57718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright 14*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer. 15*57718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright 16*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the 17*57718be8SEnji Cooper * documentation and/or other materials provided with the distribution. 18*57718be8SEnji Cooper * 19*57718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20*57718be8SEnji Cooper * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21*57718be8SEnji Cooper * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22*57718be8SEnji Cooper * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23*57718be8SEnji Cooper * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*57718be8SEnji Cooper * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*57718be8SEnji Cooper * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*57718be8SEnji Cooper * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*57718be8SEnji Cooper * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*57718be8SEnji Cooper * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*57718be8SEnji Cooper * POSSIBILITY OF SUCH DAMAGE. 30*57718be8SEnji Cooper */ 31*57718be8SEnji Cooper 32*57718be8SEnji Cooper #include <sys/cdefs.h> 33*57718be8SEnji Cooper __COPYRIGHT("@(#) Copyright (c) 2008\ 34*57718be8SEnji Cooper The NetBSD Foundation, inc. All rights reserved."); 35*57718be8SEnji Cooper __RCSID("$NetBSD: t_cdefs.c,v 1.3 2013/09/05 09:01:27 gsutre Exp $"); 36*57718be8SEnji Cooper 37*57718be8SEnji Cooper #include <atf-c.h> 38*57718be8SEnji Cooper #include <sys/types.h> 39*57718be8SEnji Cooper #include <limits.h> 40*57718be8SEnji Cooper #include <stdint.h> 41*57718be8SEnji Cooper 42*57718be8SEnji Cooper static const struct { 43*57718be8SEnji Cooper const char *name; 44*57718be8SEnji Cooper intmax_t min; 45*57718be8SEnji Cooper intmax_t max; 46*57718be8SEnji Cooper } s[] = { 47*57718be8SEnji Cooper { "signed char", SCHAR_MIN, SCHAR_MAX }, 48*57718be8SEnji Cooper { "signed short", SHRT_MIN, SHRT_MAX }, 49*57718be8SEnji Cooper { "signed int", INT_MIN, INT_MAX }, 50*57718be8SEnji Cooper { "signed long", LONG_MIN, LONG_MAX }, 51*57718be8SEnji Cooper { "signed long long", LLONG_MIN, LLONG_MAX }, 52*57718be8SEnji Cooper }; 53*57718be8SEnji Cooper 54*57718be8SEnji Cooper static const struct { 55*57718be8SEnji Cooper const char *name; 56*57718be8SEnji Cooper uintmax_t min; 57*57718be8SEnji Cooper uintmax_t max; 58*57718be8SEnji Cooper } u[] = { 59*57718be8SEnji Cooper { "unsigned char", 0, UCHAR_MAX }, 60*57718be8SEnji Cooper { "unsigned short", 0, USHRT_MAX }, 61*57718be8SEnji Cooper { "unsigned int", 0, UINT_MAX }, 62*57718be8SEnji Cooper { "unsigned long", 0, ULONG_MAX }, 63*57718be8SEnji Cooper { "unsigned long long", 0, ULLONG_MAX }, 64*57718be8SEnji Cooper }; 65*57718be8SEnji Cooper 66*57718be8SEnji Cooper ATF_TC(stypeminmax); 67*57718be8SEnji Cooper ATF_TC_HEAD(stypeminmax, tc) 68*57718be8SEnji Cooper { 69*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks signed type min/max macros"); 70*57718be8SEnji Cooper } 71*57718be8SEnji Cooper 72*57718be8SEnji Cooper 73*57718be8SEnji Cooper ATF_TC_BODY(stypeminmax, tc) 74*57718be8SEnji Cooper { 75*57718be8SEnji Cooper #define CHECK(a, b) ATF_REQUIRE(__type_min(a) == s[b].min); \ 76*57718be8SEnji Cooper ATF_REQUIRE(__type_max(a) == s[b].max) 77*57718be8SEnji Cooper 78*57718be8SEnji Cooper CHECK(signed char, 0); 79*57718be8SEnji Cooper CHECK(signed short, 1); 80*57718be8SEnji Cooper CHECK(signed int, 2); 81*57718be8SEnji Cooper CHECK(signed long, 3); 82*57718be8SEnji Cooper CHECK(signed long long, 4); 83*57718be8SEnji Cooper #undef CHECK 84*57718be8SEnji Cooper } 85*57718be8SEnji Cooper 86*57718be8SEnji Cooper ATF_TC(utypeminmax); 87*57718be8SEnji Cooper ATF_TC_HEAD(utypeminmax, tc) 88*57718be8SEnji Cooper { 89*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks unsigned type min/max macros"); 90*57718be8SEnji Cooper } 91*57718be8SEnji Cooper 92*57718be8SEnji Cooper ATF_TC_BODY(utypeminmax, tc) 93*57718be8SEnji Cooper { 94*57718be8SEnji Cooper #define CHECK(a, b) ATF_REQUIRE(__type_min(a) == u[b].min); \ 95*57718be8SEnji Cooper ATF_REQUIRE(__type_max(a) == u[b].max) 96*57718be8SEnji Cooper 97*57718be8SEnji Cooper CHECK(unsigned char, 0); 98*57718be8SEnji Cooper CHECK(unsigned short, 1); 99*57718be8SEnji Cooper CHECK(unsigned int, 2); 100*57718be8SEnji Cooper CHECK(unsigned long, 3); 101*57718be8SEnji Cooper CHECK(unsigned long long, 4); 102*57718be8SEnji Cooper #undef CHECK 103*57718be8SEnji Cooper } 104*57718be8SEnji Cooper 105*57718be8SEnji Cooper ATF_TC(sissigned); 106*57718be8SEnji Cooper ATF_TC_HEAD(sissigned, tc) 107*57718be8SEnji Cooper { 108*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks issigned macro for signed"); 109*57718be8SEnji Cooper } 110*57718be8SEnji Cooper 111*57718be8SEnji Cooper ATF_TC_BODY(sissigned, tc) 112*57718be8SEnji Cooper { 113*57718be8SEnji Cooper #define CHECK(a) ATF_REQUIRE(__type_is_signed(a) == 1) 114*57718be8SEnji Cooper 115*57718be8SEnji Cooper CHECK(signed char); 116*57718be8SEnji Cooper CHECK(signed short); 117*57718be8SEnji Cooper CHECK(signed int); 118*57718be8SEnji Cooper CHECK(signed long); 119*57718be8SEnji Cooper CHECK(signed long long); 120*57718be8SEnji Cooper #undef CHECK 121*57718be8SEnji Cooper } 122*57718be8SEnji Cooper 123*57718be8SEnji Cooper ATF_TC(uissigned); 124*57718be8SEnji Cooper ATF_TC_HEAD(uissigned, tc) 125*57718be8SEnji Cooper { 126*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks issigned macro for unsigned"); 127*57718be8SEnji Cooper } 128*57718be8SEnji Cooper 129*57718be8SEnji Cooper ATF_TC_BODY(uissigned, tc) 130*57718be8SEnji Cooper { 131*57718be8SEnji Cooper #define CHECK(a) ATF_REQUIRE(__type_is_signed(a) == 0) 132*57718be8SEnji Cooper 133*57718be8SEnji Cooper CHECK(unsigned char); 134*57718be8SEnji Cooper CHECK(unsigned short); 135*57718be8SEnji Cooper CHECK(unsigned int); 136*57718be8SEnji Cooper CHECK(unsigned long); 137*57718be8SEnji Cooper CHECK(unsigned long long); 138*57718be8SEnji Cooper #undef CHECK 139*57718be8SEnji Cooper } 140*57718be8SEnji Cooper 141*57718be8SEnji Cooper ATF_TC(utypemask); 142*57718be8SEnji Cooper ATF_TC_HEAD(utypemask, tc) 143*57718be8SEnji Cooper { 144*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks type mask macro for unsigned"); 145*57718be8SEnji Cooper } 146*57718be8SEnji Cooper 147*57718be8SEnji Cooper ATF_TC_BODY(utypemask, tc) 148*57718be8SEnji Cooper { 149*57718be8SEnji Cooper #define CHECK(a, b) ATF_REQUIRE(__type_mask(a) == b) 150*57718be8SEnji Cooper 151*57718be8SEnji Cooper CHECK(unsigned char, 0xffffffffffffff00ULL); 152*57718be8SEnji Cooper CHECK(unsigned short, 0xffffffffffff0000ULL); 153*57718be8SEnji Cooper CHECK(unsigned int, 0xffffffff00000000ULL); 154*57718be8SEnji Cooper CHECK(unsigned long long, 0x0000000000000000ULL); 155*57718be8SEnji Cooper #undef CHECK 156*57718be8SEnji Cooper } 157*57718be8SEnji Cooper 158*57718be8SEnji Cooper ATF_TC(stypemask); 159*57718be8SEnji Cooper ATF_TC_HEAD(stypemask, tc) 160*57718be8SEnji Cooper { 161*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks type mask macro for signed"); 162*57718be8SEnji Cooper } 163*57718be8SEnji Cooper 164*57718be8SEnji Cooper ATF_TC_BODY(stypemask, tc) 165*57718be8SEnji Cooper { 166*57718be8SEnji Cooper #define CHECK(a, b) ATF_REQUIRE(__type_mask(a) == b) 167*57718be8SEnji Cooper 168*57718be8SEnji Cooper CHECK(signed char, 0xffffffffffffff00LL); 169*57718be8SEnji Cooper CHECK(signed short, 0xffffffffffff0000LL); 170*57718be8SEnji Cooper CHECK(signed int, 0xffffffff00000000LL); 171*57718be8SEnji Cooper CHECK(signed long long, 0x0000000000000000LL); 172*57718be8SEnji Cooper #undef CHECK 173*57718be8SEnji Cooper } 174*57718be8SEnji Cooper 175*57718be8SEnji Cooper ATF_TC(stypefit); 176*57718be8SEnji Cooper ATF_TC_HEAD(stypefit, tc) 177*57718be8SEnji Cooper { 178*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks typefit macro for signed"); 179*57718be8SEnji Cooper } 180*57718be8SEnji Cooper 181*57718be8SEnji Cooper ATF_TC_BODY(stypefit, tc) 182*57718be8SEnji Cooper { 183*57718be8SEnji Cooper #define CHECK(a, b, c) ATF_REQUIRE(!__type_fit(a, b) == c) 184*57718be8SEnji Cooper 185*57718be8SEnji Cooper CHECK(signed char, -1, 0); 186*57718be8SEnji Cooper CHECK(signed char, 1, 0); 187*57718be8SEnji Cooper CHECK(signed char, 0x7f, 0); 188*57718be8SEnji Cooper CHECK(signed char, 0x80, 1); 189*57718be8SEnji Cooper CHECK(signed char, 0xff, 1); 190*57718be8SEnji Cooper CHECK(signed char, 0x1ff, 1); 191*57718be8SEnji Cooper 192*57718be8SEnji Cooper CHECK(signed short, -1, 0); 193*57718be8SEnji Cooper CHECK(signed short, 1, 0); 194*57718be8SEnji Cooper CHECK(signed short, 0x7fff, 0); 195*57718be8SEnji Cooper CHECK(signed short, 0x8000, 1); 196*57718be8SEnji Cooper CHECK(signed short, 0xffff, 1); 197*57718be8SEnji Cooper CHECK(signed short, 0x1ffff, 1); 198*57718be8SEnji Cooper 199*57718be8SEnji Cooper CHECK(signed int, -1, 0); 200*57718be8SEnji Cooper CHECK(signed int, 1, 0); 201*57718be8SEnji Cooper CHECK(signed int, 0x7fffffff, 0); 202*57718be8SEnji Cooper CHECK(signed int, 0x80000000, 1); 203*57718be8SEnji Cooper CHECK(signed int, 0xffffffff, 1); 204*57718be8SEnji Cooper CHECK(signed int, 0x1ffffffffLL, 1); 205*57718be8SEnji Cooper 206*57718be8SEnji Cooper CHECK(signed long long, -1, 0); 207*57718be8SEnji Cooper CHECK(signed long long, 1, 0); 208*57718be8SEnji Cooper CHECK(signed long long, 0x7fffffffffffffffLL, 0); 209*57718be8SEnji Cooper CHECK(signed long long, 0x8000000000000000LL, 1); 210*57718be8SEnji Cooper CHECK(signed long long, 0xffffffffffffffffLL, 1); 211*57718be8SEnji Cooper 212*57718be8SEnji Cooper #undef CHECK 213*57718be8SEnji Cooper } 214*57718be8SEnji Cooper 215*57718be8SEnji Cooper ATF_TC(utypefit); 216*57718be8SEnji Cooper ATF_TC_HEAD(utypefit, tc) 217*57718be8SEnji Cooper { 218*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks typefit macro for unsigned"); 219*57718be8SEnji Cooper } 220*57718be8SEnji Cooper 221*57718be8SEnji Cooper ATF_TC_BODY(utypefit, tc) 222*57718be8SEnji Cooper { 223*57718be8SEnji Cooper #define CHECK(a, b, c) ATF_REQUIRE(!__type_fit(a, b) == c) 224*57718be8SEnji Cooper 225*57718be8SEnji Cooper CHECK(unsigned char, -1, 1); 226*57718be8SEnji Cooper CHECK(unsigned char, 1, 0); 227*57718be8SEnji Cooper CHECK(unsigned char, 0x7f, 0); 228*57718be8SEnji Cooper CHECK(unsigned char, 0x80, 0); 229*57718be8SEnji Cooper CHECK(unsigned char, 0xff, 0); 230*57718be8SEnji Cooper CHECK(unsigned char, 0x1ff, 1); 231*57718be8SEnji Cooper 232*57718be8SEnji Cooper CHECK(unsigned short, -1, 1); 233*57718be8SEnji Cooper CHECK(unsigned short, 1, 0); 234*57718be8SEnji Cooper CHECK(unsigned short, 0x7fff, 0); 235*57718be8SEnji Cooper CHECK(unsigned short, 0x8000, 0); 236*57718be8SEnji Cooper CHECK(unsigned short, 0xffff, 0); 237*57718be8SEnji Cooper CHECK(unsigned short, 0x1ffff, 1); 238*57718be8SEnji Cooper 239*57718be8SEnji Cooper CHECK(unsigned int, -1, 1); 240*57718be8SEnji Cooper CHECK(unsigned int, 1, 0); 241*57718be8SEnji Cooper CHECK(unsigned int, 0x7fffffff, 0); 242*57718be8SEnji Cooper CHECK(unsigned int, 0x80000000, 0); 243*57718be8SEnji Cooper CHECK(unsigned int, 0xffffffff, 0); 244*57718be8SEnji Cooper CHECK(unsigned int, 0x1ffffffffLL, 1); 245*57718be8SEnji Cooper 246*57718be8SEnji Cooper CHECK(unsigned long long, -1, 1); 247*57718be8SEnji Cooper CHECK(unsigned long long, 1, 0); 248*57718be8SEnji Cooper CHECK(unsigned long long, 0x7fffffffffffffffULL, 0); 249*57718be8SEnji Cooper CHECK(unsigned long long, 0x8000000000000000ULL, 0); 250*57718be8SEnji Cooper CHECK(unsigned long long, 0xffffffffffffffffULL, 0); 251*57718be8SEnji Cooper 252*57718be8SEnji Cooper #undef CHECK 253*57718be8SEnji Cooper } 254*57718be8SEnji Cooper 255*57718be8SEnji Cooper ATF_TP_ADD_TCS(tp) 256*57718be8SEnji Cooper { 257*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, stypeminmax); 258*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, utypeminmax); 259*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, sissigned); 260*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, uissigned); 261*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, stypemask); 262*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, utypemask); 263*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, stypefit); 264*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, utypefit); 265*57718be8SEnji Cooper 266*57718be8SEnji Cooper return atf_no_error(); 267*57718be8SEnji Cooper } 268