1/* Test of <stdint.h> substitute. 2 Copyright (C) 2006-2010 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17/* Written by Bruno Haible <bruno@clisp.org>, 2006. */ 18 19#include <config.h> 20 21/* Whether to enable pedantic checks. */ 22#define DO_PEDANTIC 0 23 24#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ 25#define __STDC_CONSTANT_MACROS 1 /* likewise */ 26#include <stdint.h> 27 28#include "verify.h" 29#include "intprops.h" 30 31#if __GNUC__ >= 2 && DO_PEDANTIC 32# define verify_same_types(expr1,expr2) \ 33 extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ 34 extern void _verify_func(__LINE__) (__typeof__ (expr2) *); 35# define _verify_func(line) _verify_func2(line) 36# define _verify_func2(line) verify_func_ ## line 37#else 38# define verify_same_types(expr1,expr2) extern void verify_func (int) 39#endif 40 41/* 7.18.1.1. Exact-width integer types */ 42/* 7.18.2.1. Limits of exact-width integer types */ 43 44int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; 45verify (TYPE_MINIMUM (int8_t) == INT8_MIN); 46verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); 47verify_same_types (INT8_MIN, (int8_t) 0 + 0); 48verify_same_types (INT8_MAX, (int8_t) 0 + 0); 49 50int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; 51verify (TYPE_MINIMUM (int16_t) == INT16_MIN); 52verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); 53verify_same_types (INT16_MIN, (int16_t) 0 + 0); 54verify_same_types (INT16_MAX, (int16_t) 0 + 0); 55 56int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; 57verify (TYPE_MINIMUM (int32_t) == INT32_MIN); 58verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); 59verify_same_types (INT32_MIN, (int32_t) 0 + 0); 60verify_same_types (INT32_MAX, (int32_t) 0 + 0); 61 62#ifdef INT64_MAX 63int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; 64verify (TYPE_MINIMUM (int64_t) == INT64_MIN); 65verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); 66verify_same_types (INT64_MIN, (int64_t) 0 + 0); 67verify_same_types (INT64_MAX, (int64_t) 0 + 0); 68#endif 69 70uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; 71verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); 72verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); 73 74uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; 75verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); 76verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); 77 78uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; 79verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); 80verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); 81 82#ifdef UINT64_MAX 83uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; 84verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); 85verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); 86#endif 87 88#if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX 89/* ok */ 90#else 91err or; 92#endif 93 94#if UINT8_MAX && UINT16_MAX && UINT32_MAX 95/* ok */ 96#else 97err or; 98#endif 99 100/* 7.18.1.2. Minimum-width integer types */ 101/* 7.18.2.2. Limits of minimum-width integer types */ 102 103int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; 104verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); 105verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); 106verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); 107verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); 108 109int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; 110verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); 111verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); 112verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); 113verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); 114 115int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; 116verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); 117verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); 118verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); 119verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); 120 121#ifdef INT_LEAST64_MAX 122int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; 123verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); 124verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); 125verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); 126verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); 127#endif 128 129uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; 130verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); 131verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); 132 133uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; 134verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); 135verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); 136 137uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; 138verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); 139verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); 140 141#ifdef UINT_LEAST64_MAX 142uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; 143verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); 144verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); 145#endif 146 147#if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX 148/* ok */ 149#else 150err or; 151#endif 152 153#if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX 154/* ok */ 155#else 156err or; 157#endif 158 159/* 7.18.1.3. Fastest minimum-width integer types */ 160/* 7.18.2.3. Limits of fastest minimum-width integer types */ 161 162int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; 163verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); 164verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); 165verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); 166verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); 167 168int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; 169verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); 170verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); 171verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); 172verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); 173 174int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; 175verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); 176verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); 177verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); 178verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); 179 180#ifdef INT_FAST64_MAX 181int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; 182verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); 183verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); 184verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); 185verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); 186#endif 187 188uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; 189verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); 190verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); 191 192uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; 193verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); 194verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); 195 196uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; 197verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); 198verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); 199 200#ifdef UINT_FAST64_MAX 201uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; 202verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); 203verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); 204#endif 205 206#if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX 207/* ok */ 208#else 209err or; 210#endif 211 212#if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX 213/* ok */ 214#else 215err or; 216#endif 217 218/* 7.18.1.4. Integer types capable of holding object pointers */ 219/* 7.18.2.4. Limits of integer types capable of holding object pointers */ 220 221intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; 222verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); 223verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); 224verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); 225verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); 226 227uintptr_t h[2] = { 17, UINTPTR_MAX }; 228verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); 229verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); 230 231#if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX 232/* ok */ 233#else 234err or; 235#endif 236 237/* 7.18.1.5. Greatest-width integer types */ 238/* 7.18.2.5. Limits of greatest-width integer types */ 239 240intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; 241verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); 242verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); 243verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); 244verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); 245 246uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; 247verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); 248verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); 249 250/* As of 2007, Sun C and HP-UX 10.20 cc don't support 'long long' constants in 251 the preprocessor. */ 252#if !(defined __SUNPRO_C || (defined __hpux && !defined __GNUC__)) 253#if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX 254/* ok */ 255#else 256err or; 257#endif 258#endif 259 260/* 7.18.3. Limits of other integer types */ 261 262#include <stddef.h> 263 264verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); 265verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); 266verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); 267verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); 268 269#if PTRDIFF_MIN && PTRDIFF_MAX 270/* ok */ 271#else 272err or; 273#endif 274 275#include <signal.h> 276 277verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); 278verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); 279verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); 280verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); 281 282#if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX 283/* ok */ 284#else 285err or; 286#endif 287 288verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); 289verify_same_types (SIZE_MAX, (size_t) 0 + 0); 290 291#if SIZE_MAX 292/* ok */ 293#else 294err or; 295#endif 296 297#if HAVE_WCHAR_T 298verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); 299verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); 300verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); 301verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); 302 303# if WCHAR_MIN != 17 && WCHAR_MAX 304/* ok */ 305# else 306err or; 307# endif 308#endif 309 310#if HAVE_WINT_T 311# include <wchar.h> 312 313verify (TYPE_MINIMUM (wint_t) == WINT_MIN); 314verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); 315verify_same_types (WINT_MIN, (wint_t) 0 + 0); 316verify_same_types (WINT_MAX, (wint_t) 0 + 0); 317 318# if WINT_MIN != 17 && WINT_MAX 319/* ok */ 320# else 321err or; 322# endif 323#endif 324 325/* 7.18.4. Macros for integer constants */ 326 327verify (INT8_C (17) == 17); 328verify_same_types (INT8_C (17), (int_least8_t)0 + 0); 329verify (UINT8_C (17) == 17); 330verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); 331 332verify (INT16_C (17) == 17); 333verify_same_types (INT16_C (17), (int_least16_t)0 + 0); 334verify (UINT16_C (17) == 17); 335verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); 336 337verify (INT32_C (17) == 17); 338verify_same_types (INT32_C (17), (int_least32_t)0 + 0); 339verify (UINT32_C (17) == 17); 340verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); 341 342#ifdef INT64_C 343verify (INT64_C (17) == 17); 344verify_same_types (INT64_C (17), (int_least64_t)0 + 0); 345#endif 346#ifdef UINT64_C 347verify (UINT64_C (17) == 17); 348verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); 349#endif 350 351verify (INTMAX_C (17) == 17); 352verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); 353verify (UINTMAX_C (17) == 17); 354verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); 355 356 357int 358main (void) 359{ 360 return 0; 361} 362