Home | History | Annotate | Download | only in numeric.limits.members
      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