Use BOOST_NO_CXX11_NUMERIC_LIMITS for testing with C++03 standard libraries. Always show test output.

This commit is contained in:
Beman
2015-03-16 08:58:42 -04:00
parent 44542694e3
commit 5ab08db7a4
2 changed files with 26 additions and 6 deletions

View File

@ -24,5 +24,5 @@ project
[ run endian_operations_test.cpp ]
[ run endian_in_union_test.cpp ]
[ run conversion_test.cpp ]
[ run floating_point_test.cpp ]
[ run floating_point_test.cpp : : : <test-info>always_show_run_output ]
;

View File

@ -116,7 +116,11 @@ namespace
return tmp;
}
const std::size_t n_test_cases = 16;
#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
const int n_test_cases = 15;
#else
const int n_test_cases = 14; // we do not test lowest() for C++0x std libs
#endif
boost::array<test_case<float>, n_test_cases> float_test_cases;
boost::array<test_case<double>, n_test_cases> double_test_cases;
@ -139,10 +143,12 @@ namespace
double_test_cases[i++].assign("numeric_limits<double>::max()",
numeric_limits<double>::max(), "7fefffffffffffff", "ffffffffffffef7f");
# ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
float_test_cases[i].assign("numeric_limits<float>::lowest()",
numeric_limits<float>::lowest(), "ff7fffff", "ffff7fff");
double_test_cases[i++].assign("numeric_limits<double>::lowest()",
numeric_limits<double>::lowest(), "ffefffffffffffff", "ffffffffffffefff");
# endif
float_test_cases[i].assign("numeric_limits<float>::epsilon()",
numeric_limits<float>::epsilon(), "34000000", "00000034");
@ -169,10 +175,10 @@ namespace
double_test_cases[i++].assign("numeric_limits<double>::quiet_NaN()",
numeric_limits<double>::quiet_NaN(), "7ff8000000000000", "000000000000f87f");
float_test_cases[i].assign("numeric_limits<float>::signaling_NaN()",
numeric_limits<float>::signaling_NaN(), "7fc00001", "0100c07f");
double_test_cases[i++].assign("numeric_limits<double>::signaling_NaN()",
numeric_limits<double>::signaling_NaN(), "7ff8000000000001", "010000000000f87f");
//float_test_cases[i].assign("numeric_limits<float>::signaling_NaN()",
// numeric_limits<float>::signaling_NaN(), "7fc00001", "0100c07f");
//double_test_cases[i++].assign("numeric_limits<double>::signaling_NaN()",
// numeric_limits<double>::signaling_NaN(), "7ff8000000000001", "010000000000f87f");
float_test_cases[i].assign("numeric_limits<float>::denorm_min()",
numeric_limits<float>::denorm_min(), "00000001", "01000000");
@ -237,7 +243,9 @@ namespace
cout << " has_denorm " << numeric_limits<T>::has_denorm << "\n";
cout << " digits " << numeric_limits<T>::digits << "\n";
cout << " digits10 " << numeric_limits<T>::digits10 << "\n";
# ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
cout << " max_digits10 " << numeric_limits<T>::max_digits10 << "\n";
# endif
cout << " radix " << numeric_limits<T>::radix << "\n";
cout << " min_exponent " << numeric_limits<T>::min_exponent << "\n";
cout << " min_exponent10 " << numeric_limits<T>::min_exponent10 << "\n";
@ -245,7 +253,9 @@ namespace
cout << " max_exponent10 " << numeric_limits<T>::max_exponent10 << "\n";
show_value("min()", numeric_limits<T>::min());
show_value("max()", numeric_limits<T>::max());
# ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
show_value("lowest()", numeric_limits<T>::lowest());
# endif
show_value("epsilon()", numeric_limits<T>::epsilon());
show_value("round_error()", numeric_limits<T>::round_error());
show_value("infinity()", numeric_limits<T>::infinity());
@ -280,8 +290,18 @@ void auto_test(const char* msg, const boost::array<test_case<T>, n_test_cases>&
int cpp_main(int, char *[])
{
#ifdef BOOST_BIG_ENDIAN
cout << "platform is big endian\n";
#else
cout << "platform is little endian\n";
#endif
cout << "byte swap intrinsics: " BOOST_ENDIAN_INTRINSIC_MSG << endl;
#ifdef BOOST_NO_CXX11_NUMERIC_LIMITS
cout << "BOOST_NO_CXX11_NUMERIC_LIMITS is defined" << endl;
#endif
//#define BOOST_ENDIAN_FORCE_ERROR
#ifdef BOOST_ENDIAN_FORCE_ERROR
BOOST_TEST_MEM_EQ(1.0f, 1.0);