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 18struct A 19{ 20 A(int i = 0) : data_(i) {} 21 int data_; 22}; 23 24bool operator == (const A& x, const A& y) {return x.data_ == y.data_;} 25 26int 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