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