diff --git a/test/float_test.cpp b/test/float_test.cpp index cb21901..7ed3a3f 100644 --- a/test/float_test.cpp +++ b/test/float_test.cpp @@ -16,16 +16,45 @@ #include #include #include +#include #include using namespace boost::endian; using std::cout; using std::endl; +using std::hex; +using std::dec; using std::numeric_limits; namespace { + std::string to_hex(const float& x) + { + std::stringstream stream; + stream << "0x" + << std::setfill('0') << std::setw(sizeof(float) * 2) + << std::hex << *reinterpret_cast(&x); + return stream.str(); + } + + std::string to_hex(const double& x) + { + std::stringstream stream; + stream << "0x" + << std::setfill('0') << std::setw(sizeof(double) * 2) + << std::hex << *reinterpret_cast(&x); + return stream.str(); + } + + template + void show_value(const char* desc, const T& value) + { + cout << " " << desc << " " << value + << ", big " << to_hex(native_to_big(value)) + << ", little " << to_hex(native_to_little(value)) << "\n"; + } + template void report_limits(const char* type) { @@ -44,23 +73,35 @@ namespace cout << " has_quiet_NaN " << numeric_limits::has_quiet_NaN << "\n"; cout << " has_signaling_NaN " << numeric_limits::has_signaling_NaN << "\n"; cout << " has_denorm " << numeric_limits::has_denorm << "\n"; - cout << " min() " << numeric_limits::min() << "\n"; - cout << " max() " << numeric_limits::max() << "\n"; - cout << " lowest() " << numeric_limits::lowest() << "\n"; cout << " digits " << numeric_limits::digits << "\n"; cout << " digits10 " << numeric_limits::digits10 << "\n"; cout << " max_digits10 " << numeric_limits::max_digits10 << "\n"; cout << " radix " << numeric_limits::radix << "\n"; - cout << " epsilon() " << numeric_limits::epsilon() << "\n"; - cout << " round_error() " << numeric_limits::round_error() << "\n"; cout << " min_exponent " << numeric_limits::min_exponent << "\n"; cout << " min_exponent10 " << numeric_limits::min_exponent10 << "\n"; cout << " max_exponent " << numeric_limits::max_exponent << "\n"; cout << " max_exponent10 " << numeric_limits::max_exponent10 << "\n"; - cout << " infinity() " << numeric_limits::infinity() << "\n"; - cout << " quiet_NaN() " << numeric_limits::quiet_NaN() << "\n"; - cout << " signaling_NaN() " << numeric_limits::signaling_NaN() << "\n"; - cout << " denorm_min() " << numeric_limits::denorm_min() << "\n"; + //cout << " min() " << numeric_limits::min() << ", " << to_hex(numeric_limits::min()) << "\n"; + //cout << " max() " << numeric_limits::max() << "\n"; + //cout << " lowest() " << numeric_limits::lowest() << "\n"; + //cout << " epsilon() " << numeric_limits::epsilon() << "\n"; + //cout << " round_error() " << numeric_limits::round_error() << "\n"; + //cout << " infinity() " << numeric_limits::infinity() << "\n"; + //cout << " quiet_NaN() " << numeric_limits::quiet_NaN() << "\n"; + //cout << " signaling_NaN() " << numeric_limits::signaling_NaN() << "\n"; + //cout << " denorm_min() " << numeric_limits::denorm_min() << "\n"; + show_value("min()", numeric_limits::min()); + show_value("max()", numeric_limits::max()); + show_value("lowest()", numeric_limits::lowest()); + show_value("epsilon()", numeric_limits::epsilon()); + show_value("round_error()", numeric_limits::round_error()); + show_value("infinity()", numeric_limits::infinity()); + show_value("-infinity()", -numeric_limits::infinity()); + show_value("quiet_NaN()", numeric_limits::quiet_NaN()); + show_value("signaling_NaN()", numeric_limits::signaling_NaN()); + show_value("denorm_min()", numeric_limits::denorm_min()); + show_value("0.0", static_cast(0.0)); + show_value("1.0", static_cast(1.0)); } template