diff --git a/include/nlohmann/detail/output/binary_writer.hpp b/include/nlohmann/detail/output/binary_writer.hpp index 3f0b786b6..ee59af149 100644 --- a/include/nlohmann/detail/output/binary_writer.hpp +++ b/include/nlohmann/detail/output/binary_writer.hpp @@ -1723,40 +1723,40 @@ class binary_writer oa->write_character(to_char_type(0x8D)); write_number(static_cast(value)); } - else if (value < -33554432 || value > 67637031) + else if (value < -33818506 || value > 67637031) { // 32 bit integers oa->write_character(to_char_type(0x8C)); write_number(static_cast(value)); } - else if (value < -262144) + else if (value <= -264075) { - JSON_ASSERT(value >= -33554432); - value = -value - 1; + JSON_ASSERT(value >= -33818506); + value = -(value + 264075); oa->write_character(static_cast(0xF0 + (value >> 22 & 0x07))); oa->write_character(static_cast(0xC0 + (value >> 16 & 0x3F))); oa->write_character(static_cast(value >> 8)); oa->write_character(static_cast(value)); } - else if (value < -1920) + else if (value <= -1931) { - JSON_ASSERT(value >= -262144); - value = -value - 1; + JSON_ASSERT(value >= -264074); + value = -(value + 1931); oa->write_character(static_cast(0xE0 + (value >> 14 & 0x0F))); oa->write_character(static_cast(0xC0 + (value >> 8 & 0x3F))); oa->write_character(static_cast(value)); } - else if (value < -10) + else if (value <= -11) { - JSON_ASSERT(value >= -1920); - value = -value - 1; + JSON_ASSERT(value >= -1930); + value = -(value + 11); oa->write_character(static_cast(0xC2 + (value >> 6 & 0x1F))); oa->write_character(static_cast(0xC0 + (value & 0x3F))); } - else if (value < 0) + else if (value <= -1) { JSON_ASSERT(value >= -10); - value = -value - 1; + value = -(value + 1); oa->write_character(static_cast(0xB8 + value)); } else if (value <= 39) diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index e50c9a751..eae9dedb4 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -15297,40 +15297,40 @@ class binary_writer oa->write_character(to_char_type(0x8D)); write_number(static_cast(value)); } - else if (value < -33554432 || value > 67637031) + else if (value < -33818506 || value > 67637031) { // 32 bit integers oa->write_character(to_char_type(0x8C)); write_number(static_cast(value)); } - else if (value < -262144) + else if (value <= -264075) { - JSON_ASSERT(value >= -33554432); - value = -value - 1; + JSON_ASSERT(value >= -33818506); + value = -(value + 264075); oa->write_character(static_cast(0xF0 + (value >> 22 & 0x07))); oa->write_character(static_cast(0xC0 + (value >> 16 & 0x3F))); oa->write_character(static_cast(value >> 8)); oa->write_character(static_cast(value)); } - else if (value < -1920) + else if (value <= -1931) { - JSON_ASSERT(value >= -262144); - value = -value - 1; + JSON_ASSERT(value >= -264074); + value = -(value + 1931); oa->write_character(static_cast(0xE0 + (value >> 14 & 0x0F))); oa->write_character(static_cast(0xC0 + (value >> 8 & 0x3F))); oa->write_character(static_cast(value)); } - else if (value < -10) + else if (value <= -11) { - JSON_ASSERT(value >= -1920); - value = -value - 1; + JSON_ASSERT(value >= -1930); + value = -(value + 11); oa->write_character(static_cast(0xC2 + (value >> 6 & 0x1F))); oa->write_character(static_cast(0xC0 + (value & 0x3F))); } - else if (value < 0) + else if (value <= -1) { JSON_ASSERT(value >= -10); - value = -value - 1; + value = -(value + 1); oa->write_character(static_cast(0xB8 + value)); } else if (value <= 39) diff --git a/test/src/unit-bon8.cpp b/test/src/unit-bon8.cpp index b5135b033..9f6848cf6 100644 --- a/test/src/unit-bon8.cpp +++ b/test/src/unit-bon8.cpp @@ -222,7 +222,7 @@ TEST_CASE("BON8") } } - SECTION("-2147483648 (int32min)..-33554433") + SECTION("-2147483648 (int32min)..-33818507") { SECTION("-2147483648") { @@ -233,58 +233,58 @@ TEST_CASE("BON8") CHECK(result == expected); } - SECTION("-33554433") + SECTION("-33818507") { - json j = -33554433; - std::vector expected = {0x8C, 0xFD, 0xFF, 0xFF, 0xFF}; + json j = -33818507; + std::vector expected = {0x8C, 0xFD, 0xFB, 0xF8, 0x75}; const auto result = json::to_bon8(j); CHECK(result == expected); } } - SECTION("-33554432..-262145") + SECTION("-33818506..-264075") { - SECTION("-33554432") + SECTION("-33818506") { - json j = -33554432; + json j = -33818506; std::vector expected = {0xF7, 0xFF, 0xFF, 0xFF}; const auto result = json::to_bon8(j); CHECK(result == expected); } - SECTION("-262145") + SECTION("-264075") { - json j = -262145; - std::vector expected = {0xF0, 0xC4, 0x00, 0x00}; + json j = -264075; + std::vector expected = {0xF0, 0xC0, 0x00, 0x00}; const auto result = json::to_bon8(j); CHECK(result == expected); } } - SECTION("-262144..-1921") + SECTION("-264074..-1931") { - SECTION("-262144") + SECTION("-264074") { - json j = -262144; + json j = -264074; std::vector expected = {0xEF, 0xFF, 0xFF}; const auto result = json::to_bon8(j); CHECK(result == expected); } - SECTION("-1921") + SECTION("-1931") { - json j = -1921; - std::vector expected = {0xE0, 0xC7, 0x80}; + json j = -1931; + std::vector expected = {0xE0, 0xC0, 0x00}; const auto result = json::to_bon8(j); CHECK(result == expected); } } - SECTION("-1920..-11") + SECTION("-1930..-11") { - SECTION("-1920") + SECTION("-1930") { - json j = -1920; + json j = -1930; std::vector expected = {0xDF, 0xFF}; const auto result = json::to_bon8(j); CHECK(result == expected); @@ -293,7 +293,7 @@ TEST_CASE("BON8") SECTION("-11") { json j = -11; - std::vector expected = {0xC2, 0xCA}; + std::vector expected = {0xC2, 0xC0}; const auto result = json::to_bon8(j); CHECK(result == expected); }