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 #include "test_macros.h" 18 19 struct A 20 { 21 A(int i = 0) : data_(i) {} 22 int data_; 23 }; 24 25 bool operator == (const A& x, const A& y) {return x.data_ == y.data_;} 26 27 int main(int, char**) 28 { 29 static_assert(std::numeric_limits<A>::is_specialized == false, 30 "std::numeric_limits<A>::is_specialized == false"); 31 assert(std::numeric_limits<A>::min() == A()); 32 assert(std::numeric_limits<A>::max() == A()); 33 assert(std::numeric_limits<A>::lowest() == A()); 34 static_assert(std::numeric_limits<A>::digits == 0, 35 "std::numeric_limits<A>::digits == 0"); 36 static_assert(std::numeric_limits<A>::digits10 == 0, 37 "std::numeric_limits<A>::digits10 == 0"); 38 static_assert(std::numeric_limits<A>::max_digits10 == 0, 39 "std::numeric_limits<A>::max_digits10 == 0"); 40 static_assert(std::numeric_limits<A>::is_signed == false, 41 "std::numeric_limits<A>::is_signed == false"); 42 static_assert(std::numeric_limits<A>::is_integer == false, 43 "std::numeric_limits<A>::is_integer == false"); 44 static_assert(std::numeric_limits<A>::is_exact == false, 45 "std::numeric_limits<A>::is_exact == false"); 46 static_assert(std::numeric_limits<A>::radix == 0, 47 "std::numeric_limits<A>::radix == 0"); 48 assert(std::numeric_limits<A>::epsilon() == A()); 49 assert(std::numeric_limits<A>::round_error() == A()); 50 static_assert(std::numeric_limits<A>::min_exponent == 0, 51 "std::numeric_limits<A>::min_exponent == 0"); 52 static_assert(std::numeric_limits<A>::min_exponent10 == 0, 53 "std::numeric_limits<A>::min_exponent10 == 0"); 54 static_assert(std::numeric_limits<A>::max_exponent == 0, 55 "std::numeric_limits<A>::max_exponent == 0"); 56 static_assert(std::numeric_limits<A>::max_exponent10 == 0, 57 "std::numeric_limits<A>::max_exponent10 == 0"); 58 static_assert(std::numeric_limits<A>::has_infinity == false, 59 "std::numeric_limits<A>::has_infinity == false"); 60 static_assert(std::numeric_limits<A>::has_quiet_NaN == false, 61 "std::numeric_limits<A>::has_quiet_NaN == false"); 62 static_assert(std::numeric_limits<A>::has_signaling_NaN == false, 63 "std::numeric_limits<A>::has_signaling_NaN == false"); 64 static_assert(std::numeric_limits<A>::has_denorm == std::denorm_absent, 65 "std::numeric_limits<A>::has_denorm == std::denorm_absent"); 66 static_assert(std::numeric_limits<A>::has_denorm_loss == false, 67 "std::numeric_limits<A>::has_denorm_loss == false"); 68 assert(std::numeric_limits<A>::infinity() == A()); 69 assert(std::numeric_limits<A>::quiet_NaN() == A()); 70 assert(std::numeric_limits<A>::signaling_NaN() == A()); 71 assert(std::numeric_limits<A>::denorm_min() == A()); 72 static_assert(std::numeric_limits<A>::is_iec559 == false, 73 "std::numeric_limits<A>::is_iec559 == false"); 74 static_assert(std::numeric_limits<A>::is_bounded == false, 75 "std::numeric_limits<A>::is_bounded == false"); 76 static_assert(std::numeric_limits<A>::is_modulo == false, 77 "std::numeric_limits<A>::is_modulo == false"); 78 static_assert(std::numeric_limits<A>::traps == false, 79 "std::numeric_limits<A>::traps == false"); 80 static_assert(std::numeric_limits<A>::tinyness_before == false, 81 "std::numeric_limits<A>::tinyness_before == false"); 82 static_assert(std::numeric_limits<A>::round_style == std::round_toward_zero, 83 "std::numeric_limits<A>::round_style == std::round_toward_zero"); 84 85 return 0; 86 } 87