Home | History | Annotate | Download | only in numeric.limits
      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 // test numeric_limits
     11 
     12 // The default numeric_limits<T> template shall have all members, but with
     13 // 0 or false values.
     14 
     15 #include <limits>
     16 #include <cassert>
     17 
     18 struct A
     19 {
     20     A(int i = 0) : data_(i) {}
     21     int data_;
     22 };
     23 
     24 bool operator == (const A& x, const A& y) {return x.data_ == y.data_;}
     25 
     26 int main()
     27 {
     28     static_assert(std::numeric_limits<A>::is_specialized == false,
     29                  "std::numeric_limits<A>::is_specialized == false");
     30     assert(std::numeric_limits<A>::min() == A());
     31     assert(std::numeric_limits<A>::max() == A());
     32     assert(std::numeric_limits<A>::lowest() == A());
     33     static_assert(std::numeric_limits<A>::digits == 0,
     34                  "std::numeric_limits<A>::digits == 0");
     35     static_assert(std::numeric_limits<A>::digits10 == 0,
     36                  "std::numeric_limits<A>::digits10 == 0");
     37     static_assert(std::numeric_limits<A>::max_digits10 == 0,
     38                  "std::numeric_limits<A>::max_digits10 == 0");
     39     static_assert(std::numeric_limits<A>::is_signed == false,
     40                  "std::numeric_limits<A>::is_signed == false");
     41     static_assert(std::numeric_limits<A>::is_integer == false,
     42                  "std::numeric_limits<A>::is_integer == false");
     43     static_assert(std::numeric_limits<A>::is_exact == false,
     44                  "std::numeric_limits<A>::is_exact == false");
     45     static_assert(std::numeric_limits<A>::radix == 0,
     46                  "std::numeric_limits<A>::radix == 0");
     47     assert(std::numeric_limits<A>::epsilon() == A());
     48     assert(std::numeric_limits<A>::round_error() == A());
     49     static_assert(std::numeric_limits<A>::min_exponent == 0,
     50                  "std::numeric_limits<A>::min_exponent == 0");
     51     static_assert(std::numeric_limits<A>::min_exponent10 == 0,
     52                  "std::numeric_limits<A>::min_exponent10 == 0");
     53     static_assert(std::numeric_limits<A>::max_exponent == 0,
     54                  "std::numeric_limits<A>::max_exponent == 0");
     55     static_assert(std::numeric_limits<A>::max_exponent10 == 0,
     56                  "std::numeric_limits<A>::max_exponent10 == 0");
     57     static_assert(std::numeric_limits<A>::has_infinity == false,
     58                  "std::numeric_limits<A>::has_infinity == false");
     59     static_assert(std::numeric_limits<A>::has_quiet_NaN == false,
     60                  "std::numeric_limits<A>::has_quiet_NaN == false");
     61     static_assert(std::numeric_limits<A>::has_signaling_NaN == false,
     62                  "std::numeric_limits<A>::has_signaling_NaN == false");
     63     static_assert(std::numeric_limits<A>::has_denorm == std::denorm_absent,
     64                  "std::numeric_limits<A>::has_denorm == std::denorm_absent");
     65     static_assert(std::numeric_limits<A>::has_denorm_loss == false,
     66                  "std::numeric_limits<A>::has_denorm_loss == false");
     67     assert(std::numeric_limits<A>::infinity() == A());
     68     assert(std::numeric_limits<A>::quiet_NaN() == A());
     69     assert(std::numeric_limits<A>::signaling_NaN() == A());
     70     assert(std::numeric_limits<A>::denorm_min() == A());
     71     static_assert(std::numeric_limits<A>::is_iec559 == false,
     72                  "std::numeric_limits<A>::is_iec559 == false");
     73     static_assert(std::numeric_limits<A>::is_bounded == false,
     74                  "std::numeric_limits<A>::is_bounded == false");
     75     static_assert(std::numeric_limits<A>::is_modulo == false,
     76                  "std::numeric_limits<A>::is_modulo == false");
     77     static_assert(std::numeric_limits<A>::traps == false,
     78                  "std::numeric_limits<A>::traps == false");
     79     static_assert(std::numeric_limits<A>::tinyness_before == false,
     80                  "std::numeric_limits<A>::tinyness_before == false");
     81     static_assert(std::numeric_limits<A>::round_style == std::round_toward_zero,
     82                  "std::numeric_limits<A>::round_style == std::round_toward_zero");
     83 }
     84