15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // test <cstdint>
105a83710eSEric Fiselier
115a83710eSEric Fiselier #include <cstdint>
12e21582e7SMarshall Clow #include <cstddef>
135a83710eSEric Fiselier #include <csignal>
145a83710eSEric Fiselier #include <climits>
155a83710eSEric Fiselier #include <type_traits>
165a83710eSEric Fiselier #include <limits>
175a83710eSEric Fiselier #include <cassert>
185a83710eSEric Fiselier
197fc6a556SMarshall Clow #include "test_macros.h"
207fc6a556SMarshall Clow
21*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS
22*f4c1258dSLouis Dionne # include <cwchar>
23*f4c1258dSLouis Dionne # include <cwctype>
24*f4c1258dSLouis Dionne #endif
25*f4c1258dSLouis Dionne
main(int,char **)262df59c50SJF Bastien int main(int, char**)
275a83710eSEric Fiselier {
285a83710eSEric Fiselier // typedef std::int8_t
295a83710eSEric Fiselier static_assert(sizeof(std::int8_t)*CHAR_BIT == 8,
305a83710eSEric Fiselier "sizeof(std::int8_t)*CHAR_BIT == 8");
315a83710eSEric Fiselier static_assert(std::is_signed<std::int8_t>::value,
325a83710eSEric Fiselier "std::is_signed<std::int8_t>::value");
335a83710eSEric Fiselier // typedef std::int16_t
345a83710eSEric Fiselier static_assert(sizeof(std::int16_t)*CHAR_BIT == 16,
355a83710eSEric Fiselier "sizeof(std::int16_t)*CHAR_BIT == 16");
365a83710eSEric Fiselier static_assert(std::is_signed<std::int16_t>::value,
375a83710eSEric Fiselier "std::is_signed<std::int16_t>::value");
385a83710eSEric Fiselier // typedef std::int32_t
395a83710eSEric Fiselier static_assert(sizeof(std::int32_t)*CHAR_BIT == 32,
405a83710eSEric Fiselier "sizeof(std::int32_t)*CHAR_BIT == 32");
415a83710eSEric Fiselier static_assert(std::is_signed<std::int32_t>::value,
425a83710eSEric Fiselier "std::is_signed<std::int32_t>::value");
435a83710eSEric Fiselier // typedef std::int64_t
445a83710eSEric Fiselier static_assert(sizeof(std::int64_t)*CHAR_BIT == 64,
455a83710eSEric Fiselier "sizeof(std::int64_t)*CHAR_BIT == 64");
465a83710eSEric Fiselier static_assert(std::is_signed<std::int64_t>::value,
475a83710eSEric Fiselier "std::is_signed<std::int64_t>::value");
485a83710eSEric Fiselier
495a83710eSEric Fiselier // typedef std::uint8_t
505a83710eSEric Fiselier static_assert(sizeof(std::uint8_t)*CHAR_BIT == 8,
515a83710eSEric Fiselier "sizeof(std::uint8_t)*CHAR_BIT == 8");
525a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint8_t>::value,
535a83710eSEric Fiselier "std::is_unsigned<std::uint8_t>::value");
545a83710eSEric Fiselier // typedef std::uint16_t
555a83710eSEric Fiselier static_assert(sizeof(std::uint16_t)*CHAR_BIT == 16,
565a83710eSEric Fiselier "sizeof(std::uint16_t)*CHAR_BIT == 16");
575a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint16_t>::value,
585a83710eSEric Fiselier "std::is_unsigned<std::uint16_t>::value");
595a83710eSEric Fiselier // typedef std::uint32_t
605a83710eSEric Fiselier static_assert(sizeof(std::uint32_t)*CHAR_BIT == 32,
615a83710eSEric Fiselier "sizeof(std::uint32_t)*CHAR_BIT == 32");
625a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint32_t>::value,
635a83710eSEric Fiselier "std::is_unsigned<std::uint32_t>::value");
645a83710eSEric Fiselier // typedef std::uint64_t
655a83710eSEric Fiselier static_assert(sizeof(std::uint64_t)*CHAR_BIT == 64,
665a83710eSEric Fiselier "sizeof(std::uint64_t)*CHAR_BIT == 64");
675a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint64_t>::value,
685a83710eSEric Fiselier "std::is_unsigned<std::uint64_t>::value");
695a83710eSEric Fiselier
705a83710eSEric Fiselier // typedef std::int_least8_t
715a83710eSEric Fiselier static_assert(sizeof(std::int_least8_t)*CHAR_BIT >= 8,
725a83710eSEric Fiselier "sizeof(std::int_least8_t)*CHAR_BIT >= 8");
735a83710eSEric Fiselier static_assert(std::is_signed<std::int_least8_t>::value,
745a83710eSEric Fiselier "std::is_signed<std::int_least8_t>::value");
755a83710eSEric Fiselier // typedef std::int_least16_t
765a83710eSEric Fiselier static_assert(sizeof(std::int_least16_t)*CHAR_BIT >= 16,
775a83710eSEric Fiselier "sizeof(std::int_least16_t)*CHAR_BIT >= 16");
785a83710eSEric Fiselier static_assert(std::is_signed<std::int_least16_t>::value,
795a83710eSEric Fiselier "std::is_signed<std::int_least16_t>::value");
805a83710eSEric Fiselier // typedef std::int_least32_t
815a83710eSEric Fiselier static_assert(sizeof(std::int_least32_t)*CHAR_BIT >= 32,
825a83710eSEric Fiselier "sizeof(std::int_least32_t)*CHAR_BIT >= 32");
835a83710eSEric Fiselier static_assert(std::is_signed<std::int_least32_t>::value,
845a83710eSEric Fiselier "std::is_signed<std::int_least32_t>::value");
855a83710eSEric Fiselier // typedef std::int_least64_t
865a83710eSEric Fiselier static_assert(sizeof(std::int_least64_t)*CHAR_BIT >= 64,
875a83710eSEric Fiselier "sizeof(std::int_least64_t)*CHAR_BIT >= 64");
885a83710eSEric Fiselier static_assert(std::is_signed<std::int_least64_t>::value,
895a83710eSEric Fiselier "std::is_signed<std::int_least64_t>::value");
905a83710eSEric Fiselier
915a83710eSEric Fiselier // typedef std::uint_least8_t
925a83710eSEric Fiselier static_assert(sizeof(std::uint_least8_t)*CHAR_BIT >= 8,
935a83710eSEric Fiselier "sizeof(std::uint_least8_t)*CHAR_BIT >= 8");
945a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_least8_t>::value,
955a83710eSEric Fiselier "std::is_unsigned<std::uint_least8_t>::value");
965a83710eSEric Fiselier // typedef std::uint_least16_t
975a83710eSEric Fiselier static_assert(sizeof(std::uint_least16_t)*CHAR_BIT >= 16,
985a83710eSEric Fiselier "sizeof(std::uint_least16_t)*CHAR_BIT >= 16");
995a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_least16_t>::value,
1005a83710eSEric Fiselier "std::is_unsigned<std::uint_least16_t>::value");
1015a83710eSEric Fiselier // typedef std::uint_least32_t
1025a83710eSEric Fiselier static_assert(sizeof(std::uint_least32_t)*CHAR_BIT >= 32,
1035a83710eSEric Fiselier "sizeof(std::uint_least32_t)*CHAR_BIT >= 32");
1045a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_least32_t>::value,
1055a83710eSEric Fiselier "std::is_unsigned<std::uint_least32_t>::value");
1065a83710eSEric Fiselier // typedef std::uint_least64_t
1075a83710eSEric Fiselier static_assert(sizeof(std::uint_least64_t)*CHAR_BIT >= 64,
1085a83710eSEric Fiselier "sizeof(std::uint_least64_t)*CHAR_BIT >= 64");
1095a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_least64_t>::value,
1105a83710eSEric Fiselier "std::is_unsigned<std::uint_least64_t>::value");
1115a83710eSEric Fiselier
1125a83710eSEric Fiselier // typedef std::int_fast8_t
1135a83710eSEric Fiselier static_assert(sizeof(std::int_fast8_t)*CHAR_BIT >= 8,
1145a83710eSEric Fiselier "sizeof(std::int_fast8_t)*CHAR_BIT >= 8");
1155a83710eSEric Fiselier static_assert(std::is_signed<std::int_fast8_t>::value,
1165a83710eSEric Fiselier "std::is_signed<std::int_fast8_t>::value");
1175a83710eSEric Fiselier // typedef std::int_fast16_t
1185a83710eSEric Fiselier static_assert(sizeof(std::int_fast16_t)*CHAR_BIT >= 16,
1195a83710eSEric Fiselier "sizeof(std::int_fast16_t)*CHAR_BIT >= 16");
1205a83710eSEric Fiselier static_assert(std::is_signed<std::int_fast16_t>::value,
1215a83710eSEric Fiselier "std::is_signed<std::int_fast16_t>::value");
1225a83710eSEric Fiselier // typedef std::int_fast32_t
1235a83710eSEric Fiselier static_assert(sizeof(std::int_fast32_t)*CHAR_BIT >= 32,
1245a83710eSEric Fiselier "sizeof(std::int_fast32_t)*CHAR_BIT >= 32");
1255a83710eSEric Fiselier static_assert(std::is_signed<std::int_fast32_t>::value,
1265a83710eSEric Fiselier "std::is_signed<std::int_fast32_t>::value");
1275a83710eSEric Fiselier // typedef std::int_fast64_t
1285a83710eSEric Fiselier static_assert(sizeof(std::int_fast64_t)*CHAR_BIT >= 64,
1295a83710eSEric Fiselier "sizeof(std::int_fast64_t)*CHAR_BIT >= 64");
1305a83710eSEric Fiselier static_assert(std::is_signed<std::int_fast64_t>::value,
1315a83710eSEric Fiselier "std::is_signed<std::int_fast64_t>::value");
1325a83710eSEric Fiselier
1335a83710eSEric Fiselier // typedef std::uint_fast8_t
1345a83710eSEric Fiselier static_assert(sizeof(std::uint_fast8_t)*CHAR_BIT >= 8,
1355a83710eSEric Fiselier "sizeof(std::uint_fast8_t)*CHAR_BIT >= 8");
1365a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_fast8_t>::value,
1375a83710eSEric Fiselier "std::is_unsigned<std::uint_fast8_t>::value");
1385a83710eSEric Fiselier // typedef std::uint_fast16_t
1395a83710eSEric Fiselier static_assert(sizeof(std::uint_fast16_t)*CHAR_BIT >= 16,
1405a83710eSEric Fiselier "sizeof(std::uint_fast16_t)*CHAR_BIT >= 16");
1415a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_fast16_t>::value,
1425a83710eSEric Fiselier "std::is_unsigned<std::uint_fast16_t>::value");
1435a83710eSEric Fiselier // typedef std::uint_fast32_t
1445a83710eSEric Fiselier static_assert(sizeof(std::uint_fast32_t)*CHAR_BIT >= 32,
1455a83710eSEric Fiselier "sizeof(std::uint_fast32_t)*CHAR_BIT >= 32");
1465a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_fast32_t>::value,
1475a83710eSEric Fiselier "std::is_unsigned<std::uint_fast32_t>::value");
1485a83710eSEric Fiselier // typedef std::uint_fast64_t
1495a83710eSEric Fiselier static_assert(sizeof(std::uint_fast64_t)*CHAR_BIT >= 64,
1505a83710eSEric Fiselier "sizeof(std::uint_fast64_t)*CHAR_BIT >= 64");
1515a83710eSEric Fiselier static_assert(std::is_unsigned<std::uint_fast64_t>::value,
1525a83710eSEric Fiselier "std::is_unsigned<std::uint_fast64_t>::value");
1535a83710eSEric Fiselier
1545a83710eSEric Fiselier // typedef std::intptr_t
1555a83710eSEric Fiselier static_assert(sizeof(std::intptr_t) >= sizeof(void*),
1565a83710eSEric Fiselier "sizeof(std::intptr_t) >= sizeof(void*)");
1575a83710eSEric Fiselier static_assert(std::is_signed<std::intptr_t>::value,
1585a83710eSEric Fiselier "std::is_signed<std::intptr_t>::value");
1595a83710eSEric Fiselier // typedef std::uintptr_t
1605a83710eSEric Fiselier static_assert(sizeof(std::uintptr_t) >= sizeof(void*),
1615a83710eSEric Fiselier "sizeof(std::uintptr_t) >= sizeof(void*)");
1625a83710eSEric Fiselier static_assert(std::is_unsigned<std::uintptr_t>::value,
1635a83710eSEric Fiselier "std::is_unsigned<std::uintptr_t>::value");
1645a83710eSEric Fiselier
1655a83710eSEric Fiselier // typedef std::intmax_t
1665a83710eSEric Fiselier static_assert(sizeof(std::intmax_t) >= sizeof(long long),
1675a83710eSEric Fiselier "sizeof(std::intmax_t) >= sizeof(long long)");
1685a83710eSEric Fiselier static_assert(std::is_signed<std::intmax_t>::value,
1695a83710eSEric Fiselier "std::is_signed<std::intmax_t>::value");
1705a83710eSEric Fiselier // typedef std::uintmax_t
1715a83710eSEric Fiselier static_assert(sizeof(std::uintmax_t) >= sizeof(unsigned long long),
1725a83710eSEric Fiselier "sizeof(std::uintmax_t) >= sizeof(unsigned long long)");
1735a83710eSEric Fiselier static_assert(std::is_unsigned<std::uintmax_t>::value,
1745a83710eSEric Fiselier "std::is_unsigned<std::uintmax_t>::value");
1755a83710eSEric Fiselier
1765a83710eSEric Fiselier // INTN_MIN
1775a83710eSEric Fiselier static_assert(INT8_MIN == -128, "INT8_MIN == -128");
1785a83710eSEric Fiselier static_assert(INT16_MIN == -32768, "INT16_MIN == -32768");
1792afa66e1SEric Fiselier static_assert(INT32_MIN == -2147483647 - 1, "INT32_MIN == -2147483648");
1802afa66e1SEric Fiselier static_assert(INT64_MIN == -9223372036854775807LL - 1, "INT64_MIN == -9223372036854775808LL");
1815a83710eSEric Fiselier
1825a83710eSEric Fiselier // INTN_MAX
1835a83710eSEric Fiselier static_assert(INT8_MAX == 127, "INT8_MAX == 127");
1845a83710eSEric Fiselier static_assert(INT16_MAX == 32767, "INT16_MAX == 32767");
1855a83710eSEric Fiselier static_assert(INT32_MAX == 2147483647, "INT32_MAX == 2147483647");
1865a83710eSEric Fiselier static_assert(INT64_MAX == 9223372036854775807LL, "INT64_MAX == 9223372036854775807LL");
1875a83710eSEric Fiselier
1885a83710eSEric Fiselier // UINTN_MAX
1895a83710eSEric Fiselier static_assert(UINT8_MAX == 255, "UINT8_MAX == 255");
1905a83710eSEric Fiselier static_assert(UINT16_MAX == 65535, "UINT16_MAX == 65535");
1915a83710eSEric Fiselier static_assert(UINT32_MAX == 4294967295U, "UINT32_MAX == 4294967295");
1925a83710eSEric Fiselier static_assert(UINT64_MAX == 18446744073709551615ULL, "UINT64_MAX == 18446744073709551615ULL");
1935a83710eSEric Fiselier
1945a83710eSEric Fiselier // INT_FASTN_MIN
1955a83710eSEric Fiselier static_assert(INT_FAST8_MIN <= -128, "INT_FAST8_MIN <= -128");
1965a83710eSEric Fiselier static_assert(INT_FAST16_MIN <= -32768, "INT_FAST16_MIN <= -32768");
1972afa66e1SEric Fiselier static_assert(INT_FAST32_MIN <= -2147483647 - 1, "INT_FAST32_MIN <= -2147483648");
1982afa66e1SEric Fiselier static_assert(INT_FAST64_MIN <= -9223372036854775807LL - 1, "INT_FAST64_MIN <= -9223372036854775808LL");
1995a83710eSEric Fiselier
2005a83710eSEric Fiselier // INT_FASTN_MAX
2015a83710eSEric Fiselier static_assert(INT_FAST8_MAX >= 127, "INT_FAST8_MAX >= 127");
2025a83710eSEric Fiselier static_assert(INT_FAST16_MAX >= 32767, "INT_FAST16_MAX >= 32767");
2035a83710eSEric Fiselier static_assert(INT_FAST32_MAX >= 2147483647, "INT_FAST32_MAX >= 2147483647");
2045a83710eSEric Fiselier static_assert(INT_FAST64_MAX >= 9223372036854775807LL, "INT_FAST64_MAX >= 9223372036854775807LL");
2055a83710eSEric Fiselier
2065a83710eSEric Fiselier // UINT_FASTN_MAX
2075a83710eSEric Fiselier static_assert(UINT_FAST8_MAX >= 255, "UINT_FAST8_MAX >= 255");
2085a83710eSEric Fiselier static_assert(UINT_FAST16_MAX >= 65535, "UINT_FAST16_MAX >= 65535");
2095a83710eSEric Fiselier static_assert(UINT_FAST32_MAX >= 4294967295U, "UINT_FAST32_MAX >= 4294967295");
2105a83710eSEric Fiselier static_assert(UINT_FAST64_MAX >= 18446744073709551615ULL, "UINT_FAST64_MAX >= 18446744073709551615ULL");
2115a83710eSEric Fiselier
2125a83710eSEric Fiselier // INTPTR_MIN
2135a83710eSEric Fiselier assert(INTPTR_MIN == std::numeric_limits<std::intptr_t>::min());
2145a83710eSEric Fiselier
2155a83710eSEric Fiselier // INTPTR_MAX
2165a83710eSEric Fiselier assert(INTPTR_MAX == std::numeric_limits<std::intptr_t>::max());
2175a83710eSEric Fiselier
2185a83710eSEric Fiselier // UINTPTR_MAX
2195a83710eSEric Fiselier assert(UINTPTR_MAX == std::numeric_limits<std::uintptr_t>::max());
2205a83710eSEric Fiselier
2215a83710eSEric Fiselier // INTMAX_MIN
2225a83710eSEric Fiselier assert(INTMAX_MIN == std::numeric_limits<std::intmax_t>::min());
2235a83710eSEric Fiselier
2245a83710eSEric Fiselier // INTMAX_MAX
2255a83710eSEric Fiselier assert(INTMAX_MAX == std::numeric_limits<std::intmax_t>::max());
2265a83710eSEric Fiselier
2275a83710eSEric Fiselier // UINTMAX_MAX
2285a83710eSEric Fiselier assert(UINTMAX_MAX == std::numeric_limits<std::uintmax_t>::max());
2295a83710eSEric Fiselier
2305a83710eSEric Fiselier // PTRDIFF_MIN
2315a83710eSEric Fiselier assert(PTRDIFF_MIN == std::numeric_limits<std::ptrdiff_t>::min());
2325a83710eSEric Fiselier
2335a83710eSEric Fiselier // PTRDIFF_MAX
2345a83710eSEric Fiselier assert(PTRDIFF_MAX == std::numeric_limits<std::ptrdiff_t>::max());
2355a83710eSEric Fiselier
2365a83710eSEric Fiselier // SIG_ATOMIC_MIN
2375a83710eSEric Fiselier assert(SIG_ATOMIC_MIN == std::numeric_limits<std::sig_atomic_t>::min());
2385a83710eSEric Fiselier
2395a83710eSEric Fiselier // SIG_ATOMIC_MAX
2405a83710eSEric Fiselier assert(SIG_ATOMIC_MAX == std::numeric_limits<std::sig_atomic_t>::max());
2415a83710eSEric Fiselier
2425a83710eSEric Fiselier // SIZE_MAX
2435a83710eSEric Fiselier assert(SIZE_MAX == std::numeric_limits<std::size_t>::max());
2445a83710eSEric Fiselier
245*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS
2465a83710eSEric Fiselier // WCHAR_MIN
2475a83710eSEric Fiselier assert(WCHAR_MIN == std::numeric_limits<wchar_t>::min());
2485a83710eSEric Fiselier
2495a83710eSEric Fiselier // WCHAR_MAX
2505a83710eSEric Fiselier assert(WCHAR_MAX == std::numeric_limits<wchar_t>::max());
2515a83710eSEric Fiselier
2525a83710eSEric Fiselier // WINT_MIN
2535a83710eSEric Fiselier assert(WINT_MIN == std::numeric_limits<std::wint_t>::min());
2545a83710eSEric Fiselier
2555a83710eSEric Fiselier // WINT_MAX
2565a83710eSEric Fiselier assert(WINT_MAX == std::numeric_limits<std::wint_t>::max());
257*f4c1258dSLouis Dionne #endif
2585a83710eSEric Fiselier
2595a83710eSEric Fiselier #ifndef INT8_C
2605a83710eSEric Fiselier #error INT8_C not defined
2615a83710eSEric Fiselier #endif
2625a83710eSEric Fiselier
2635a83710eSEric Fiselier #ifndef INT16_C
2645a83710eSEric Fiselier #error INT16_C not defined
2655a83710eSEric Fiselier #endif
2665a83710eSEric Fiselier
2675a83710eSEric Fiselier #ifndef INT32_C
2685a83710eSEric Fiselier #error INT32_C not defined
2695a83710eSEric Fiselier #endif
2705a83710eSEric Fiselier
2715a83710eSEric Fiselier #ifndef INT64_C
2725a83710eSEric Fiselier #error INT64_C not defined
2735a83710eSEric Fiselier #endif
2745a83710eSEric Fiselier
2755a83710eSEric Fiselier #ifndef UINT8_C
2765a83710eSEric Fiselier #error UINT8_C not defined
2775a83710eSEric Fiselier #endif
2785a83710eSEric Fiselier
2795a83710eSEric Fiselier #ifndef UINT16_C
2805a83710eSEric Fiselier #error UINT16_C not defined
2815a83710eSEric Fiselier #endif
2825a83710eSEric Fiselier
2835a83710eSEric Fiselier #ifndef UINT32_C
2845a83710eSEric Fiselier #error UINT32_C not defined
2855a83710eSEric Fiselier #endif
2865a83710eSEric Fiselier
2875a83710eSEric Fiselier #ifndef UINT64_C
2885a83710eSEric Fiselier #error UINT64_C not defined
2895a83710eSEric Fiselier #endif
2905a83710eSEric Fiselier
2915a83710eSEric Fiselier #ifndef INTMAX_C
2925a83710eSEric Fiselier #error INTMAX_C not defined
2935a83710eSEric Fiselier #endif
2945a83710eSEric Fiselier
2955a83710eSEric Fiselier #ifndef UINTMAX_C
2965a83710eSEric Fiselier #error UINTMAX_C not defined
2975a83710eSEric Fiselier #endif
2982df59c50SJF Bastien
2992df59c50SJF Bastien return 0;
3005a83710eSEric Fiselier }
301