mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // ArduinoJson - https://arduinojson.org
 | |
| // Copyright © 2014-2023, 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);
 | |
|   }
 | |
| }
 |