mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-29 10:17:39 +02:00
Changed integer storage from positive/negative to signed/unsigned
This commit is contained in:
@ -76,11 +76,28 @@ TEST_CASE("JsonVariant::as()") {
|
||||
REQUIRE(variant.as<std::string>() == "-42");
|
||||
}
|
||||
|
||||
SECTION("set(42UL)") {
|
||||
variant.set(42UL);
|
||||
|
||||
REQUIRE(variant.as<bool>() == true);
|
||||
REQUIRE(variant.as<double>() == 42.0);
|
||||
REQUIRE(variant.as<std::string>() == "42");
|
||||
}
|
||||
|
||||
SECTION("set(0L)") {
|
||||
variant.set(0L);
|
||||
|
||||
REQUIRE(variant.as<bool>() == false);
|
||||
REQUIRE(variant.as<double>() == 0.0);
|
||||
REQUIRE(variant.as<std::string>() == "0");
|
||||
}
|
||||
|
||||
SECTION("set(0UL)") {
|
||||
variant.set(0UL);
|
||||
|
||||
REQUIRE(variant.as<bool>() == false);
|
||||
REQUIRE(variant.as<double>() == 0.0);
|
||||
REQUIRE(variant.as<std::string>() == "0");
|
||||
}
|
||||
|
||||
SECTION("set(null)") {
|
||||
|
@ -46,8 +46,14 @@ TEST_CASE("serialize MsgPack value") {
|
||||
}
|
||||
|
||||
SECTION("positive fixint") {
|
||||
checkVariant(0, "\x00");
|
||||
checkVariant(127, "\x7F");
|
||||
SECTION("signed") {
|
||||
checkVariant(0, "\x00");
|
||||
checkVariant(127, "\x7F");
|
||||
}
|
||||
SECTION("unsigned") {
|
||||
checkVariant(0U, "\x00");
|
||||
checkVariant(127U, "\x7F");
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("uint 8") {
|
||||
|
@ -47,6 +47,7 @@ TEST_CASE("parseNumber<int32_t>()") {
|
||||
|
||||
TEST_CASE("parseNumber<uint8_t>()") {
|
||||
checkInteger<uint8_t>("0", 0);
|
||||
checkInteger<uint8_t>("-0", 0);
|
||||
checkInteger<uint8_t>("255", 255);
|
||||
checkInteger<uint8_t>("+255", 255);
|
||||
checkInteger<uint8_t>("3.14", 3);
|
||||
|
@ -23,7 +23,27 @@ TEST_CASE("Test unsigned integer overflow") {
|
||||
parseNumber("4294967296", second);
|
||||
}
|
||||
|
||||
REQUIRE(first.type() == uint8_t(VALUE_IS_POSITIVE_INTEGER));
|
||||
REQUIRE(first.type() == uint8_t(VALUE_IS_UNSIGNED_INTEGER));
|
||||
REQUIRE(second.type() == uint8_t(VALUE_IS_FLOAT));
|
||||
}
|
||||
|
||||
TEST_CASE("Test signed integer overflow") {
|
||||
VariantData first, second;
|
||||
first.init();
|
||||
second.init();
|
||||
|
||||
// Avoids MSVC warning C4127 (conditional expression is constant)
|
||||
size_t integerSize = sizeof(Integer);
|
||||
|
||||
if (integerSize == 8) {
|
||||
parseNumber("-9223372036854775808", first);
|
||||
parseNumber("-9223372036854775809", second);
|
||||
} else {
|
||||
parseNumber("-2147483648", first);
|
||||
parseNumber("-2147483649", second);
|
||||
}
|
||||
|
||||
REQUIRE(first.type() == uint8_t(VALUE_IS_SIGNED_INTEGER));
|
||||
REQUIRE(second.type() == uint8_t(VALUE_IS_FLOAT));
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
add_executable(TextFormatterTests
|
||||
writeFloat.cpp
|
||||
writeInteger.cpp
|
||||
writeString.cpp
|
||||
)
|
||||
|
||||
|
55
extras/tests/TextFormatter/writeInteger.cpp
Normal file
55
extras/tests/TextFormatter/writeInteger.cpp
Normal file
@ -0,0 +1,55 @@
|
||||
// ArduinoJson - https://arduinojson.org
|
||||
// Copyright Benoit Blanchon 2014-2021
|
||||
// MIT License
|
||||
|
||||
#include <catch.hpp>
|
||||
#include <limits>
|
||||
#include <string>
|
||||
|
||||
#include <ArduinoJson/Json/TextFormatter.hpp>
|
||||
#include <ArduinoJson/Serialization/Writer.hpp>
|
||||
|
||||
using namespace ARDUINOJSON_NAMESPACE;
|
||||
|
||||
template <typename T>
|
||||
void checkWriteInteger(T value, std::string expected) {
|
||||
char output[1024];
|
||||
StaticStringWriter sb(output, sizeof(output));
|
||||
TextFormatter<StaticStringWriter> writer(sb);
|
||||
writer.writeInteger<T>(value);
|
||||
REQUIRE(expected == output);
|
||||
REQUIRE(writer.bytesWritten() == expected.size());
|
||||
}
|
||||
|
||||
TEST_CASE("int8_t") {
|
||||
checkWriteInteger<int8_t>(0, "0");
|
||||
checkWriteInteger<int8_t>(-128, "-128");
|
||||
checkWriteInteger<int8_t>(127, "127");
|
||||
}
|
||||
|
||||
TEST_CASE("uint8_t") {
|
||||
checkWriteInteger<uint8_t>(0, "0");
|
||||
checkWriteInteger<uint8_t>(255, "255");
|
||||
}
|
||||
|
||||
TEST_CASE("int16_t") {
|
||||
checkWriteInteger<int16_t>(0, "0");
|
||||
checkWriteInteger<int16_t>(-32768, "-32768");
|
||||
checkWriteInteger<int16_t>(32767, "32767");
|
||||
}
|
||||
|
||||
TEST_CASE("uint16_t") {
|
||||
checkWriteInteger<uint16_t>(0, "0");
|
||||
checkWriteInteger<uint16_t>(65535, "65535");
|
||||
}
|
||||
|
||||
TEST_CASE("int32_t") {
|
||||
checkWriteInteger<int32_t>(0, "0");
|
||||
checkWriteInteger<int32_t>(-2147483647 - 1, "-2147483648");
|
||||
checkWriteInteger<int32_t>(2147483647, "2147483647");
|
||||
}
|
||||
|
||||
TEST_CASE("uint32_t") {
|
||||
checkWriteInteger<uint32_t>(0, "0");
|
||||
checkWriteInteger<uint32_t>(4294967295U, "4294967295");
|
||||
}
|
Reference in New Issue
Block a user