// 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 ) ;
}
}