forked from boostorg/config
refactored tests to account for numeric_limits<>::has_XXX flags
[SVN r10193]
This commit is contained in:
@@ -66,18 +66,10 @@ void test_float_limits(const T &, const char * msg)
|
|||||||
BOOST_TEST(!lim::is_integer);
|
BOOST_TEST(!lim::is_integer);
|
||||||
BOOST_TEST(lim::is_signed);
|
BOOST_TEST(lim::is_signed);
|
||||||
|
|
||||||
BOOST_TEST(lim::epsilon() > 0);
|
|
||||||
|
|
||||||
BOOST_TEST(lim::has_infinity);
|
|
||||||
BOOST_TEST(lim::has_quiet_NaN);
|
|
||||||
BOOST_TEST(lim::has_signaling_NaN);
|
|
||||||
|
|
||||||
const T infinity = lim::infinity();
|
const T infinity = lim::infinity();
|
||||||
const T qnan = lim::quiet_NaN();
|
const T qnan = lim::quiet_NaN();
|
||||||
const T snan = lim::signaling_NaN();
|
const T snan = lim::signaling_NaN();
|
||||||
|
|
||||||
// make sure those values are not 0 or similar nonsense
|
|
||||||
|
|
||||||
std::cout << "IEEE-compatible: " << lim::is_iec559
|
std::cout << "IEEE-compatible: " << lim::is_iec559
|
||||||
<< ", traps: " << lim::traps
|
<< ", traps: " << lim::traps
|
||||||
<< ", bounded: " << lim::is_bounded
|
<< ", bounded: " << lim::is_bounded
|
||||||
@@ -89,13 +81,29 @@ void test_float_limits(const T &, const char * msg)
|
|||||||
print_hex_val(qnan, "qnan");
|
print_hex_val(qnan, "qnan");
|
||||||
print_hex_val(snan, "snan");
|
print_hex_val(snan, "snan");
|
||||||
|
|
||||||
// infinity is beyond the representable range
|
|
||||||
BOOST_TEST(lim::max() > 1000);
|
BOOST_TEST(lim::max() > 1000);
|
||||||
BOOST_TEST(lim::infinity() > lim::max());
|
|
||||||
BOOST_TEST(-lim::infinity() < -lim::max());
|
|
||||||
BOOST_TEST(lim::min() < 0.001);
|
|
||||||
BOOST_TEST(lim::min() > 0);
|
BOOST_TEST(lim::min() > 0);
|
||||||
|
BOOST_TEST(lim::min() < 0.001);
|
||||||
|
BOOST_TEST(lim::epsilon() > 0);
|
||||||
|
|
||||||
|
if(lim::is_iec559) {
|
||||||
|
BOOST_TEST(lim::has_infinity);
|
||||||
|
BOOST_TEST(lim::has_quiet_NaN);
|
||||||
|
BOOST_TEST(lim::has_signaling_NaN);
|
||||||
|
} else {
|
||||||
|
std::cout << "Does not claim IEEE conformance" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lim::has_infinity) {
|
||||||
|
// make sure those values are not 0 or similar nonsense
|
||||||
|
// infinity is beyond the representable range
|
||||||
|
BOOST_TEST(infinity > lim::max());
|
||||||
|
BOOST_TEST(-infinity < -lim::max());
|
||||||
|
} else {
|
||||||
|
std::cout << "Does not have infinity" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lim::has_quiet_NaN) {
|
||||||
// NaNs shall always compare "false" when compared for equality
|
// NaNs shall always compare "false" when compared for equality
|
||||||
// If one of these fail, your compiler may be optimizing incorrectly
|
// If one of these fail, your compiler may be optimizing incorrectly
|
||||||
BOOST_TEST(! (qnan == 42));
|
BOOST_TEST(! (qnan == 42));
|
||||||
@@ -108,6 +116,9 @@ void test_float_limits(const T &, const char * msg)
|
|||||||
// BOOST_TEST(! (qnan > 42));
|
// BOOST_TEST(! (qnan > 42));
|
||||||
// BOOST_TEST(! (qnan <= 42));
|
// BOOST_TEST(! (qnan <= 42));
|
||||||
// BOOST_TEST(! (qnan >= 42));
|
// BOOST_TEST(! (qnan >= 42));
|
||||||
|
} else {
|
||||||
|
std::cout << "Does not have QNaN" << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user