123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // ArduinoJson - https://arduinojson.org
- // Copyright © 2014-2022, Benoit BLANCHON
- // MIT License
- #include <ArduinoJson.h>
- #include <catch.hpp>
- template <typename TOut, typename TIn>
- void shouldBeOk(TIn value) {
- StaticJsonDocument<1> doc;
- JsonVariant var = doc.to<JsonVariant>();
- var.set(value);
- REQUIRE(var.as<TOut>() == TOut(value));
- }
- template <typename TOut, typename TIn>
- void shouldOverflow(TIn value) {
- StaticJsonDocument<1> 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);
- }
- }
|