From d59e1d77160b8d28248adff42cc3844e8d12a34a Mon Sep 17 00:00:00 2001 From: GeorgFritze Date: Tue, 7 Jun 2022 09:46:39 +0200 Subject: [PATCH] update msgpack_basic test for compact double packaging update pack_double and pack_float to avoid warnings --- include/msgpack/v1/pack.hpp | 8 ++++---- test/msgpack_basic.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/msgpack/v1/pack.hpp b/include/msgpack/v1/pack.hpp index 1c48c52d..46d00e7a 100644 --- a/include/msgpack/v1/pack.hpp +++ b/include/msgpack/v1/pack.hpp @@ -1140,10 +1140,10 @@ inline packer& packer::pack_float(float d) { if(d == d) { // check for nan // compare d to limits to avoid undefined behaviour - if(d >= 0 && d <= std::numeric_limits::max() && d == uint64_t(d)) { + if(d >= 0 && d <= float(std::numeric_limits::max()) && d == float(uint64_t(d))) { pack_imp_uint64(uint64_t(d)); return *this; - } else if(d >= std::numeric_limits::min() && d == int64_t(d)) { + } else if(d >= float(std::numeric_limits::min()) && d == float(int64_t(d))) { pack_imp_int64(int64_t(d)); return *this; } @@ -1162,10 +1162,10 @@ inline packer& packer::pack_double(double d) { if(d == d) { // check for nan // compare d to limits to avoid undefined behaviour - if(d >= 0 && d <= std::numeric_limits::max() && d == uint64_t(d)) { + if(d >= 0 && d <= double(std::numeric_limits::max()) && d == double(uint64_t(d))) { pack_imp_uint64(uint64_t(d)); return *this; - } else if(d >= std::numeric_limits::min() && d == int64_t(d)) { + } else if(d >= double(std::numeric_limits::min()) && d == double(int64_t(d))) { pack_imp_int64(int64_t(d)); return *this; } diff --git a/test/msgpack_basic.cpp b/test/msgpack_basic.cpp index 24b2a31f..b2caf2cf 100644 --- a/test/msgpack_basic.cpp +++ b/test/msgpack_basic.cpp @@ -154,6 +154,8 @@ BOOST_AUTO_TEST_CASE(simple_buffer_float) v.push_back(-0.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::min()); v.push_back(numeric_limits::max()); v.push_back(nanf("tag")); @@ -186,6 +188,12 @@ BOOST_AUTO_TEST_CASE(simple_buffer_float) BOOST_CHECK(std::isinf(val2)); else BOOST_CHECK(fabs(val2 - val1) <= kEPS); + + // check for compact storing of float + if (val1 == val1 && val1 == float(int64_t(val1))) + BOOST_REQUIRE_EQUAL(sbuf.size(),1); + else + BOOST_REQUIRE_EQUAL(sbuf.data()[0],char(0xca)); } } @@ -236,6 +244,8 @@ BOOST_AUTO_TEST_CASE(simple_buffer_double) v.push_back(-0.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::min()); v.push_back(numeric_limits::max()); v.push_back(nanf("tag")); @@ -272,6 +282,12 @@ BOOST_AUTO_TEST_CASE(simple_buffer_double) BOOST_CHECK(std::isinf(val2)); else BOOST_CHECK(fabs(val2 - val1) <= kEPS); + + // check for compact storing of double + if (val1 == val1 && val1 == double(int64_t(val1))) + BOOST_REQUIRE_EQUAL(sbuf.size(),1); + else + BOOST_REQUIRE_EQUAL(uint8_t(sbuf.data()[0]),uint8_t(0xcb)); } }