1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // test numeric_limits 10 11 // The default numeric_limits<T> template shall have all members, but with 12 // 0 or false values. 13 14 #include <limits> 15 #include <cassert> 16 17 struct A 18 { 19 A(int i = 0) : data_(i) {} 20 int data_; 21 }; 22 23 bool operator == (const A& x, const A& y) {return x.data_ == y.data_;} 24 25 int main(int, char**) 26 { 27 static_assert(std::numeric_limits<A>::is_specialized == false, 28 "std::numeric_limits<A>::is_specialized == false"); 29 assert(std::numeric_limits<A>::min() == A()); 30 assert(std::numeric_limits<A>::max() == A()); 31 assert(std::numeric_limits<A>::lowest() == A()); 32 static_assert(std::numeric_limits<A>::digits == 0, 33 "std::numeric_limits<A>::digits == 0"); 34 static_assert(std::numeric_limits<A>::digits10 == 0, 35 "std::numeric_limits<A>::digits10 == 0"); 36 static_assert(std::numeric_limits<A>::max_digits10 == 0, 37 "std::numeric_limits<A>::max_digits10 == 0"); 38 static_assert(std::numeric_limits<A>::is_signed == false, 39 "std::numeric_limits<A>::is_signed == false"); 40 static_assert(std::numeric_limits<A>::is_integer == false, 41 "std::numeric_limits<A>::is_integer == false"); 42 static_assert(std::numeric_limits<A>::is_exact == false, 43 "std::numeric_limits<A>::is_exact == false"); 44 static_assert(std::numeric_limits<A>::radix == 0, 45 "std::numeric_limits<A>::radix == 0"); 46 assert(std::numeric_limits<A>::epsilon() == A()); 47 assert(std::numeric_limits<A>::round_error() == A()); 48 static_assert(std::numeric_limits<A>::min_exponent == 0, 49 "std::numeric_limits<A>::min_exponent == 0"); 50 static_assert(std::numeric_limits<A>::min_exponent10 == 0, 51 "std::numeric_limits<A>::min_exponent10 == 0"); 52 static_assert(std::numeric_limits<A>::max_exponent == 0, 53 "std::numeric_limits<A>::max_exponent == 0"); 54 static_assert(std::numeric_limits<A>::max_exponent10 == 0, 55 "std::numeric_limits<A>::max_exponent10 == 0"); 56 static_assert(std::numeric_limits<A>::has_infinity == false, 57 "std::numeric_limits<A>::has_infinity == false"); 58 static_assert(std::numeric_limits<A>::has_quiet_NaN == false, 59 "std::numeric_limits<A>::has_quiet_NaN == false"); 60 static_assert(std::numeric_limits<A>::has_signaling_NaN == false, 61 "std::numeric_limits<A>::has_signaling_NaN == false"); 62 static_assert(std::numeric_limits<A>::has_denorm == std::denorm_absent, 63 "std::numeric_limits<A>::has_denorm == std::denorm_absent"); 64 static_assert(std::numeric_limits<A>::has_denorm_loss == false, 65 "std::numeric_limits<A>::has_denorm_loss == false"); 66 assert(std::numeric_limits<A>::infinity() == A()); 67 assert(std::numeric_limits<A>::quiet_NaN() == A()); 68 assert(std::numeric_limits<A>::signaling_NaN() == A()); 69 assert(std::numeric_limits<A>::denorm_min() == A()); 70 static_assert(std::numeric_limits<A>::is_iec559 == false, 71 "std::numeric_limits<A>::is_iec559 == false"); 72 static_assert(std::numeric_limits<A>::is_bounded == false, 73 "std::numeric_limits<A>::is_bounded == false"); 74 static_assert(std::numeric_limits<A>::is_modulo == false, 75 "std::numeric_limits<A>::is_modulo == false"); 76 static_assert(std::numeric_limits<A>::traps == false, 77 "std::numeric_limits<A>::traps == false"); 78 static_assert(std::numeric_limits<A>::tinyness_before == false, 79 "std::numeric_limits<A>::tinyness_before == false"); 80 static_assert(std::numeric_limits<A>::round_style == std::round_toward_zero, 81 "std::numeric_limits<A>::round_style == std::round_toward_zero"); 82 83 return 0; 84 } 85