mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-13 06:44:15 +02:00
Merge pull request #1144 from stephanlachnit/p-cpp-revert-broken-float
Revert "Merge pull request #1018 from GeorgFritze/cpp_master"
This commit is contained in:
@@ -1138,17 +1138,6 @@ inline packer<Stream>& packer<Stream>::pack_unsigned_long_long(unsigned long lon
|
|||||||
template <typename Stream>
|
template <typename Stream>
|
||||||
inline packer<Stream>& packer<Stream>::pack_float(float d)
|
inline packer<Stream>& packer<Stream>::pack_float(float d)
|
||||||
{
|
{
|
||||||
if(d == d) { // check for nan
|
|
||||||
// compare d to limits to avoid undefined behaviour
|
|
||||||
if(d >= 0 && d <= float(std::numeric_limits<uint64_t>::max()) && d == float(uint64_t(d))) {
|
|
||||||
pack_imp_uint64(uint64_t(d));
|
|
||||||
return *this;
|
|
||||||
} else if(d < 0 && d >= float(std::numeric_limits<int64_t>::min()) && d == float(int64_t(d))) {
|
|
||||||
pack_imp_int64(int64_t(d));
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
union { float f; uint32_t i; } mem;
|
union { float f; uint32_t i; } mem;
|
||||||
mem.f = d;
|
mem.f = d;
|
||||||
char buf[5];
|
char buf[5];
|
||||||
@@ -1160,17 +1149,6 @@ inline packer<Stream>& packer<Stream>::pack_float(float d)
|
|||||||
template <typename Stream>
|
template <typename Stream>
|
||||||
inline packer<Stream>& packer<Stream>::pack_double(double d)
|
inline packer<Stream>& packer<Stream>::pack_double(double d)
|
||||||
{
|
{
|
||||||
if(d == d) { // check for nan
|
|
||||||
// compare d to limits to avoid undefined behaviour
|
|
||||||
if(d >= 0 && d <= double(std::numeric_limits<uint64_t>::max()) && d == double(uint64_t(d))) {
|
|
||||||
pack_imp_uint64(uint64_t(d));
|
|
||||||
return *this;
|
|
||||||
} else if(d < 0 && d >= double(std::numeric_limits<int64_t>::min()) && d == double(int64_t(d))) {
|
|
||||||
pack_imp_int64(int64_t(d));
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
union { double f; uint64_t i; } mem;
|
union { double f; uint64_t i; } mem;
|
||||||
mem.f = d;
|
mem.f = d;
|
||||||
char buf[9];
|
char buf[9];
|
||||||
|
@@ -154,8 +154,6 @@ BOOST_AUTO_TEST_CASE(simple_buffer_float)
|
|||||||
v.push_back(-0.0);
|
v.push_back(-0.0);
|
||||||
v.push_back(1.0);
|
v.push_back(1.0);
|
||||||
v.push_back(-1.0);
|
v.push_back(-1.0);
|
||||||
v.push_back(1.1f);
|
|
||||||
v.push_back(-1.1f);
|
|
||||||
v.push_back(numeric_limits<float>::min());
|
v.push_back(numeric_limits<float>::min());
|
||||||
v.push_back(numeric_limits<float>::max());
|
v.push_back(numeric_limits<float>::max());
|
||||||
v.push_back(nanf("tag"));
|
v.push_back(nanf("tag"));
|
||||||
@@ -188,12 +186,6 @@ BOOST_AUTO_TEST_CASE(simple_buffer_float)
|
|||||||
BOOST_CHECK(std::isinf(val2));
|
BOOST_CHECK(std::isinf(val2));
|
||||||
else
|
else
|
||||||
BOOST_CHECK(fabs(val2 - val1) <= kEPS);
|
BOOST_CHECK(fabs(val2 - val1) <= kEPS);
|
||||||
|
|
||||||
// check for compact storing of float
|
|
||||||
if (val1 == val1 && val1 >= float(std::numeric_limits<int64_t>::min()) && val1 <= float(std::numeric_limits<int64_t>::max()) && val1 == float(int64_t(val1)))
|
|
||||||
BOOST_REQUIRE_EQUAL(sbuf.size(),1);
|
|
||||||
else
|
|
||||||
BOOST_REQUIRE_EQUAL(sbuf.data()[0],char(0xca));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,8 +236,6 @@ BOOST_AUTO_TEST_CASE(simple_buffer_double)
|
|||||||
v.push_back(-0.0);
|
v.push_back(-0.0);
|
||||||
v.push_back(1.0);
|
v.push_back(1.0);
|
||||||
v.push_back(-1.0);
|
v.push_back(-1.0);
|
||||||
v.push_back(1.1);
|
|
||||||
v.push_back(-1.1);
|
|
||||||
v.push_back(numeric_limits<double>::min());
|
v.push_back(numeric_limits<double>::min());
|
||||||
v.push_back(numeric_limits<double>::max());
|
v.push_back(numeric_limits<double>::max());
|
||||||
v.push_back(nanf("tag"));
|
v.push_back(nanf("tag"));
|
||||||
@@ -282,12 +272,6 @@ BOOST_AUTO_TEST_CASE(simple_buffer_double)
|
|||||||
BOOST_CHECK(std::isinf(val2));
|
BOOST_CHECK(std::isinf(val2));
|
||||||
else
|
else
|
||||||
BOOST_CHECK(fabs(val2 - val1) <= kEPS);
|
BOOST_CHECK(fabs(val2 - val1) <= kEPS);
|
||||||
|
|
||||||
// check for compact storing of double
|
|
||||||
if (val1 == val1 && val1 >= double(std::numeric_limits<int64_t>::min()) && val1 <= double(std::numeric_limits<int64_t>::max()) && val1 == double(int64_t(val1)))
|
|
||||||
BOOST_REQUIRE_EQUAL(sbuf.size(),1);
|
|
||||||
else
|
|
||||||
BOOST_REQUIRE_EQUAL(uint8_t(sbuf.data()[0]),uint8_t(0xcb));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user