You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
72 lines
1.6 KiB
// ArduinoJson - https://arduinojson.org |
|
// Copyright © 2014-2024, Benoit BLANCHON |
|
// MIT License |
|
|
|
#include <ArduinoJson.h> |
|
#include <catch.hpp> |
|
|
|
template <typename TOut, typename TIn> |
|
void shouldBeOk(TIn value) { |
|
JsonDocument doc; |
|
JsonVariant var = doc.to<JsonVariant>(); |
|
var.set(value); |
|
REQUIRE(var.as<TOut>() == TOut(value)); |
|
} |
|
|
|
template <typename TOut, typename TIn> |
|
void shouldOverflow(TIn value) { |
|
JsonDocument doc; |
|
JsonVariant var = doc.to<JsonVariant>(); |
|
var.set(value); |
|
REQUIRE(var.as<TOut>() == 0); |
|
REQUIRE(var.is<TOut>() == false); |
|
} |
|
|
|
TEST_CASE("Handle integer overflow in stored integer") { |
|
SECTION("int8_t") { |
|
// ok |
|
shouldBeOk<int8_t>(-128); |
|
shouldBeOk<int8_t>(42.0); |
|
shouldBeOk<int8_t>(127); |
|
|
|
// too low |
|
shouldOverflow<int8_t>(-128.1); |
|
shouldOverflow<int8_t>(-129); |
|
|
|
// too high |
|
shouldOverflow<int8_t>(128); |
|
shouldOverflow<int8_t>(127.1); |
|
} |
|
|
|
SECTION("int16_t") { |
|
// ok |
|
shouldBeOk<int16_t>(-32768); |
|
shouldBeOk<int16_t>(-32767.9); |
|
shouldBeOk<int16_t>(32766.9); |
|
shouldBeOk<int16_t>(32767); |
|
|
|
// too low |
|
shouldOverflow<int16_t>(-32768.1); |
|
shouldOverflow<int16_t>(-32769); |
|
|
|
// too high |
|
shouldOverflow<int16_t>(32767.1); |
|
shouldOverflow<int16_t>(32768); |
|
} |
|
|
|
SECTION("uint8_t") { |
|
// ok |
|
shouldBeOk<uint8_t>(1); |
|
shouldBeOk<uint8_t>(42.0); |
|
shouldBeOk<uint8_t>(255); |
|
|
|
// too low |
|
shouldOverflow<uint8_t>(-1); |
|
shouldOverflow<uint8_t>(-0.1); |
|
|
|
// to high |
|
shouldOverflow<uint8_t>(255.1); |
|
shouldOverflow<uint8_t>(256); |
|
shouldOverflow<uint8_t>(257); |
|
} |
|
}
|
|
|