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 // long long 133 TEST_NUMERIC_LIMITS(long long) 134 TEST_NUMERIC_LIMITS(const long long) 135 TEST_NUMERIC_LIMITS(volatile long long) 136 TEST_NUMERIC_LIMITS(const volatile long long) 137 138 // unsigned short 139 TEST_NUMERIC_LIMITS(unsigned short) 140 TEST_NUMERIC_LIMITS(const unsigned short) 141 TEST_NUMERIC_LIMITS(volatile unsigned short) 142 TEST_NUMERIC_LIMITS(const volatile unsigned short) 143 144 // unsigned int 145 TEST_NUMERIC_LIMITS(unsigned int) 146 TEST_NUMERIC_LIMITS(const unsigned int) 147 TEST_NUMERIC_LIMITS(volatile unsigned int) 148 TEST_NUMERIC_LIMITS(const volatile unsigned int) 149 150 // unsigned long 151 TEST_NUMERIC_LIMITS(unsigned long) 152 TEST_NUMERIC_LIMITS(const unsigned long) 153 TEST_NUMERIC_LIMITS(volatile unsigned long) 154 TEST_NUMERIC_LIMITS(const volatile unsigned long) 155 156 // unsigned long long 157 TEST_NUMERIC_LIMITS(unsigned long long) 158 TEST_NUMERIC_LIMITS(const unsigned long long) 159 TEST_NUMERIC_LIMITS(volatile unsigned long long) 160 TEST_NUMERIC_LIMITS(const volatile unsigned long long) 161 162 // float 163 TEST_NUMERIC_LIMITS(float) 164 TEST_NUMERIC_LIMITS(const float) 165 TEST_NUMERIC_LIMITS(volatile float) 166 TEST_NUMERIC_LIMITS(const volatile float) 167 168 // double 169 TEST_NUMERIC_LIMITS(double) 170 TEST_NUMERIC_LIMITS(const double) 171 TEST_NUMERIC_LIMITS(volatile double) 172 TEST_NUMERIC_LIMITS(const volatile double) 173 174 // long double 175 TEST_NUMERIC_LIMITS(long double) 176 TEST_NUMERIC_LIMITS(const long double) 177 TEST_NUMERIC_LIMITS(volatile long double) 178 TEST_NUMERIC_LIMITS(const volatile long double) 179 180 // other 181 TEST_NUMERIC_LIMITS(other) 182 TEST_NUMERIC_LIMITS(const other) 183 TEST_NUMERIC_LIMITS(volatile other) 184 TEST_NUMERIC_LIMITS(const volatile other) 185 } 186