12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #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") {
-
- shouldBeOk<int8_t>(-128);
- shouldBeOk<int8_t>(42.0);
- shouldBeOk<int8_t>(127);
-
- shouldOverflow<int8_t>(-128.1);
- shouldOverflow<int8_t>(-129);
-
- shouldOverflow<int8_t>(128);
- shouldOverflow<int8_t>(127.1);
- }
- SECTION("int16_t") {
-
- shouldBeOk<int16_t>(-32768);
- shouldBeOk<int16_t>(-32767.9);
- shouldBeOk<int16_t>(32766.9);
- shouldBeOk<int16_t>(32767);
-
- shouldOverflow<int16_t>(-32768.1);
- shouldOverflow<int16_t>(-32769);
-
- shouldOverflow<int16_t>(32767.1);
- shouldOverflow<int16_t>(32768);
- }
- SECTION("uint8_t") {
-
- shouldBeOk<uint8_t>(1);
- shouldBeOk<uint8_t>(42.0);
- shouldBeOk<uint8_t>(255);
-
- shouldOverflow<uint8_t>(-1);
- shouldOverflow<uint8_t>(-0.1);
-
- shouldOverflow<uint8_t>(255.1);
- shouldOverflow<uint8_t>(256);
- shouldOverflow<uint8_t>(257);
- }
- }
|