| 65 | |
| 66 | template <class T> |
| 67 | static inline bool TestFloatLimits(const T&) { |
| 68 | using lim = std::numeric_limits<T>; |
| 69 | |
| 70 | CHECK_COND(lim::is_specialized); |
| 71 | CHECK_COND(!lim::is_modulo); |
| 72 | CHECK_COND(!lim::is_integer); |
| 73 | CHECK_COND(lim::is_signed); |
| 74 | |
| 75 | CHECK_COND(lim::max() > 1000); |
| 76 | CHECK_COND(lim::min() > 0); |
| 77 | CHECK_COND(lim::min() < 0.001); |
| 78 | CHECK_COND(lim::epsilon() > 0); |
| 79 | |
| 80 | if (lim::is_iec559) { |
| 81 | CHECK_COND(lim::has_infinity); |
| 82 | CHECK_COND(lim::has_quiet_NaN); |
| 83 | CHECK_COND(lim::has_signaling_NaN); |
| 84 | } |
| 85 | |
| 86 | if (lim::has_infinity) { |
| 87 | const T infinity = lim::infinity(); |
| 88 | |
| 89 | CHECK_COND(infinity > lim::max()); |
| 90 | CHECK_COND(-infinity < -lim::max()); |
| 91 | } |
| 92 | |
| 93 | return true; |
| 94 | } |
| 95 | |
| 96 | template <class T> |
| 97 | static inline bool TestNan(const T&) { |
no test coverage detected