1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include <limits> 11 12 /* 13 <limits>: 14 numeric_limits 15 is_specialized 16 digits 17 digits10 18 max_digits10 19 is_signed 20 is_integer 21 is_exact 22 radix 23 min_exponent 24 min_exponent10 25 max_exponent 26 max_exponent10 27 has_infinity 28 has_quiet_NaN 29 has_signaling_NaN 30 has_denorm 31 has_denorm_loss 32 is_iec559 33 is_bounded 34 is_modulo 35 traps 36 tinyness_before 37 round_style 38 */ 39 40 template <class _Tp> 41 void test(const _Tp &) {} 42 43 #define TEST_NUMERIC_LIMITS(type) \ 44 test(std::numeric_limits<type>::is_specialized); \ 45 test(std::numeric_limits<type>::digits); \ 46 test(std::numeric_limits<type>::digits10); \ 47 test(std::numeric_limits<type>::max_digits10); \ 48 test(std::numeric_limits<type>::is_signed); \ 49 test(std::numeric_limits<type>::is_integer); \ 50 test(std::numeric_limits<type>::is_exact); \ 51 test(std::numeric_limits<type>::radix); \ 52 test(std::numeric_limits<type>::min_exponent); \ 53 test(std::numeric_limits<type>::min_exponent10); \ 54 test(std::numeric_limits<type>::max_exponent); \ 55 test(std::numeric_limits<type>::max_exponent10); \ 56 test(std::numeric_limits<type>::has_infinity); \ 57 test(std::numeric_limits<type>::has_quiet_NaN); \ 58 test(std::numeric_limits<type>::has_signaling_NaN); \ 59 test(std::numeric_limits<type>::has_denorm); \ 60 test(std::numeric_limits<type>::has_denorm_loss); \ 61 test(std::numeric_limits<type>::is_iec559); \ 62 test(std::numeric_limits<type>::is_bounded); \ 63 test(std::numeric_limits<type>::is_modulo); \ 64 test(std::numeric_limits<type>::traps); \ 65 test(std::numeric_limits<type>::tinyness_before); \ 66 test(std::numeric_limits<type>::round_style); 67 68 struct other {}; 69 70 int main() 71 { 72 // bool 73 TEST_NUMERIC_LIMITS(bool) 74 TEST_NUMERIC_LIMITS(const bool) 75 TEST_NUMERIC_LIMITS(volatile bool) 76 TEST_NUMERIC_LIMITS(const volatile bool) 77 78 // char 79 TEST_NUMERIC_LIMITS(char) 80 TEST_NUMERIC_LIMITS(const char) 81 TEST_NUMERIC_LIMITS(volatile char) 82 TEST_NUMERIC_LIMITS(const volatile char) 83 84 // signed char 85 TEST_NUMERIC_LIMITS(signed char) 86 TEST_NUMERIC_LIMITS(const signed char) 87 TEST_NUMERIC_LIMITS(volatile signed char) 88 TEST_NUMERIC_LIMITS(const volatile signed char) 89 90 // unsigned char 91 TEST_NUMERIC_LIMITS(unsigned char) 92 TEST_NUMERIC_LIMITS(const unsigned char) 93 TEST_NUMERIC_LIMITS(volatile unsigned char) 94 TEST_NUMERIC_LIMITS(const volatile unsigned char) 95 96 // wchar_t 97 TEST_NUMERIC_LIMITS(wchar_t) 98 TEST_NUMERIC_LIMITS(const wchar_t) 99 TEST_NUMERIC_LIMITS(volatile wchar_t) 100 TEST_NUMERIC_LIMITS(const volatile wchar_t) 101 102 // char16_t 103 TEST_NUMERIC_LIMITS(char16_t) 104 TEST_NUMERIC_LIMITS(const char16_t) 105 TEST_NUMERIC_LIMITS(volatile char16_t) 106 TEST_NUMERIC_LIMITS(const volatile char16_t) 107 108 // char32_t 109 TEST_NUMERIC_LIMITS(char32_t) 110 TEST_NUMERIC_LIMITS(const char32_t) 111 TEST_NUMERIC_LIMITS(volatile char32_t) 112 TEST_NUMERIC_LIMITS(const volatile char32_t) 113 114 // short 115 TEST_NUMERIC_LIMITS(short) 116 TEST_NUMERIC_LIMITS(const short) 117 TEST_NUMERIC_LIMITS(volatile short) 118 TEST_NUMERIC_LIMITS(const volatile short) 119 120 // int 121 TEST_NUMERIC_LIMITS(int) 122 TEST_NUMERIC_LIMITS(const int) 123 TEST_NUMERIC_LIMITS(volatile int) 124 TEST_NUMERIC_LIMITS(const volatile int) 125 126 // long 127 TEST_NUMERIC_LIMITS(long) 128 TEST_NUMERIC_LIMITS(const long) 129 TEST_NUMERIC_LIMITS(volatile long) 130 TEST_NUMERIC_LIMITS(const volatile long) 131 132 #ifndef _LIBCPP_HAS_NO_INT128 133 TEST_NUMERIC_LIMITS(__int128_t) 134 TEST_NUMERIC_LIMITS(const __int128_t) 135 TEST_NUMERIC_LIMITS(volatile __int128_t) 136 TEST_NUMERIC_LIMITS(const volatile __int128_t) 137 #endif 138 139 // long long 140 TEST_NUMERIC_LIMITS(long long) 141 TEST_NUMERIC_LIMITS(const long long) 142 TEST_NUMERIC_LIMITS(volatile long long) 143 TEST_NUMERIC_LIMITS(const volatile long long) 144 145 // unsigned short 146 TEST_NUMERIC_LIMITS(unsigned short) 147 TEST_NUMERIC_LIMITS(const unsigned short) 148 TEST_NUMERIC_LIMITS(volatile unsigned short) 149 TEST_NUMERIC_LIMITS(const volatile unsigned short) 150 151 // unsigned int 152 TEST_NUMERIC_LIMITS(unsigned int) 153 TEST_NUMERIC_LIMITS(const unsigned int) 154 TEST_NUMERIC_LIMITS(volatile unsigned int) 155 TEST_NUMERIC_LIMITS(const volatile unsigned int) 156 157 // unsigned long 158 TEST_NUMERIC_LIMITS(unsigned long) 159 TEST_NUMERIC_LIMITS(const unsigned long) 160 TEST_NUMERIC_LIMITS(volatile unsigned long) 161 TEST_NUMERIC_LIMITS(const volatile unsigned long) 162 163 // unsigned long long 164 TEST_NUMERIC_LIMITS(unsigned long long) 165 TEST_NUMERIC_LIMITS(const unsigned long long) 166 TEST_NUMERIC_LIMITS(volatile unsigned long long) 167 TEST_NUMERIC_LIMITS(const volatile unsigned long long) 168 169 #ifndef _LIBCPP_HAS_NO_INT128 170 TEST_NUMERIC_LIMITS(__uint128_t) 171 TEST_NUMERIC_LIMITS(const __uint128_t) 172 TEST_NUMERIC_LIMITS(volatile __uint128_t) 173 TEST_NUMERIC_LIMITS(const volatile __uint128_t) 174 #endif 175 176 // float 177 TEST_NUMERIC_LIMITS(float) 178 TEST_NUMERIC_LIMITS(const float) 179 TEST_NUMERIC_LIMITS(volatile float) 180 TEST_NUMERIC_LIMITS(const volatile float) 181 182 // double 183 TEST_NUMERIC_LIMITS(double) 184 TEST_NUMERIC_LIMITS(const double) 185 TEST_NUMERIC_LIMITS(volatile double) 186 TEST_NUMERIC_LIMITS(const volatile double) 187 188 // long double 189 TEST_NUMERIC_LIMITS(long double) 190 TEST_NUMERIC_LIMITS(const long double) 191 TEST_NUMERIC_LIMITS(volatile long double) 192 TEST_NUMERIC_LIMITS(const volatile long double) 193 194 // other 195 TEST_NUMERIC_LIMITS(other) 196 TEST_NUMERIC_LIMITS(const other) 197 TEST_NUMERIC_LIMITS(volatile other) 198 TEST_NUMERIC_LIMITS(const volatile other) 199 } 200