mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Moved ancillary files to extras/ (fixes #1011)
				
					
				
			This commit is contained in:
		
							
								
								
									
										133
									
								
								extras/tests/JsonDeserializer/number.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								extras/tests/JsonDeserializer/number.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | ||||
| // ArduinoJson - arduinojson.org | ||||
| // Copyright Benoit Blanchon 2014-2019 | ||||
| // MIT License | ||||
|  | ||||
| #define ARDUINOJSON_USE_LONG_LONG 0 | ||||
| #define ARDUINOJSON_ENABLE_NAN 1 | ||||
| #define ARDUINOJSON_ENABLE_INFINITY 1 | ||||
|  | ||||
| #include <ArduinoJson.h> | ||||
| #include <limits.h> | ||||
| #include <catch.hpp> | ||||
|  | ||||
| namespace my { | ||||
| using ARDUINOJSON_NAMESPACE::isinf; | ||||
| using ARDUINOJSON_NAMESPACE::isnan; | ||||
| }  // namespace my | ||||
|  | ||||
| TEST_CASE("deserialize an integer") { | ||||
|   DynamicJsonDocument doc(4096); | ||||
|  | ||||
|   SECTION("Integer") { | ||||
|     SECTION("0") { | ||||
|       DeserializationError err = deserializeJson(doc, "0"); | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<int>() == true); | ||||
|       REQUIRE(doc.as<int>() == 0); | ||||
|       REQUIRE(doc.as<std::string>() == "0");  // issue #808 | ||||
|     } | ||||
|  | ||||
|     SECTION("Negative") { | ||||
|       DeserializationError err = deserializeJson(doc, "-42"); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<int>()); | ||||
|       REQUIRE_FALSE(doc.is<bool>()); | ||||
|       REQUIRE(doc.as<int>() == -42); | ||||
|     } | ||||
|  | ||||
| #if LONG_MAX == 2147483647 | ||||
|     SECTION("LONG_MAX") { | ||||
|       DeserializationError err = deserializeJson(doc, "2147483647"); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<long>() == true); | ||||
|       REQUIRE(doc.as<long>() == LONG_MAX); | ||||
|     } | ||||
|  | ||||
|     SECTION("LONG_MAX + 1") { | ||||
|       DeserializationError err = deserializeJson(doc, "2147483648"); | ||||
|  | ||||
|       CAPTURE(LONG_MIN); | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<long>() == false); | ||||
|       REQUIRE(doc.is<float>() == true); | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| #if LONG_MIN == -2147483648 | ||||
|     SECTION("LONG_MIN") { | ||||
|       DeserializationError err = deserializeJson(doc, "-2147483648"); | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<long>() == true); | ||||
|       REQUIRE(doc.as<long>() == LONG_MIN); | ||||
|     } | ||||
|  | ||||
|     SECTION("LONG_MIN - 1") { | ||||
|       DeserializationError err = deserializeJson(doc, "-2147483649"); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<long>() == false); | ||||
|       REQUIRE(doc.is<float>() == true); | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| #if ULONG_MAX == 4294967295 | ||||
|     SECTION("ULONG_MAX") { | ||||
|       DeserializationError err = deserializeJson(doc, "4294967295"); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<unsigned long>() == true); | ||||
|       REQUIRE(doc.as<unsigned long>() == ULONG_MAX); | ||||
|       REQUIRE(doc.is<long>() == false); | ||||
|     } | ||||
|  | ||||
|     SECTION("ULONG_MAX + 1") { | ||||
|       DeserializationError err = deserializeJson(doc, "4294967296"); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<unsigned long>() == false); | ||||
|       REQUIRE(doc.is<float>() == true); | ||||
|     } | ||||
| #endif | ||||
|   } | ||||
|  | ||||
|   SECTION("Floats") { | ||||
|     SECTION("Double") { | ||||
|       DeserializationError err = deserializeJson(doc, "-1.23e+4"); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE_FALSE(doc.is<int>()); | ||||
|       REQUIRE(doc.is<double>()); | ||||
|       REQUIRE(doc.as<double>() == Approx(-1.23e+4)); | ||||
|     } | ||||
|  | ||||
|     SECTION("NaN") { | ||||
|       DeserializationError err = deserializeJson(doc, "NaN"); | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<float>() == true); | ||||
|       REQUIRE(my::isnan(doc.as<float>())); | ||||
|     } | ||||
|  | ||||
|     SECTION("Infinity") { | ||||
|       DeserializationError err = deserializeJson(doc, "Infinity"); | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<float>() == true); | ||||
|       REQUIRE(my::isinf(doc.as<float>())); | ||||
|     } | ||||
|  | ||||
|     SECTION("+Infinity") { | ||||
|       DeserializationError err = deserializeJson(doc, "+Infinity"); | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<float>() == true); | ||||
|       REQUIRE(my::isinf(doc.as<float>())); | ||||
|     } | ||||
|  | ||||
|     SECTION("-Infinity") { | ||||
|       DeserializationError err = deserializeJson(doc, "-Infinity"); | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.is<float>() == true); | ||||
|       REQUIRE(my::isinf(doc.as<float>())); | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user