mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Added string deduplication (closes #1303)
This commit is contained in:
		| @@ -0,0 +1,125 @@ | ||||
| // ArduinoJson - arduinojson.org | ||||
| // Copyright Benoit Blanchon 2014-2020 | ||||
| // MIT License | ||||
|  | ||||
| #include "progmem_emulation.hpp" | ||||
|  | ||||
| #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1 | ||||
| #define ARDUINOJSON_ENABLE_PROGMEM 1 | ||||
| #define ARDUINOJSON_ENABLE_STRING_DEDUPLICATION 0 | ||||
| #include <ArduinoJson.h> | ||||
|  | ||||
| #include <catch.hpp> | ||||
|  | ||||
| TEST_CASE("ARDUINOJSON_ENABLE_STRING_DEDUPLICATION = 0") { | ||||
|   StaticJsonDocument<1024> doc; | ||||
|  | ||||
|   SECTION("deserializeJson()") { | ||||
|     SECTION("Deduplicate values") { | ||||
|       deserializeJson(doc, "[\"example\",\"example\"]"); | ||||
|  | ||||
|       CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16); | ||||
|       CHECK(doc[0].as<char*>() != doc[1].as<char*>()); | ||||
|     } | ||||
|  | ||||
|     SECTION("Deduplicate keys") { | ||||
|       deserializeJson(doc, "[{\"example\":1},{\"example\":2}]"); | ||||
|  | ||||
|       CHECK(doc.memoryUsage() == | ||||
|             2 * JSON_OBJECT_SIZE(1) + JSON_ARRAY_SIZE(2) + 16); | ||||
|  | ||||
|       const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str(); | ||||
|       const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str(); | ||||
|  | ||||
|       CHECK(key1 != key2); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   SECTION("JsonDocument") { | ||||
|     SECTION("values") { | ||||
|       SECTION("std::string") { | ||||
|         doc.add(std::string("example")); | ||||
|         doc.add(std::string("example")); | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16); | ||||
|         CHECK(doc[0].as<char*>() != doc[1].as<char*>()); | ||||
|       } | ||||
|  | ||||
|       SECTION("char*") { | ||||
|         char value[] = "example"; | ||||
|         doc.add(value); | ||||
|         doc.add(value); | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16); | ||||
|         CHECK(doc[0].as<char*>() != doc[1].as<char*>()); | ||||
|       } | ||||
|  | ||||
|       SECTION("Arduino String") { | ||||
|         doc.add(String("example")); | ||||
|         doc.add(String("example")); | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16); | ||||
|         CHECK(doc[0].as<char*>() != doc[1].as<char*>()); | ||||
|       } | ||||
|  | ||||
|       SECTION("Flash string") { | ||||
|         doc.add(F("example")); | ||||
|         doc.add(F("example")); | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16); | ||||
|         CHECK(doc[0].as<char*>() != doc[1].as<char*>()); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     SECTION("keys") { | ||||
|       SECTION("std::string") { | ||||
|         doc[0][std::string("example")] = 1; | ||||
|         doc[1][std::string("example")] = 2; | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == | ||||
|               JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16); | ||||
|  | ||||
|         const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str(); | ||||
|         const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str(); | ||||
|         CHECK(key1 != key2); | ||||
|       } | ||||
|  | ||||
|       SECTION("char*") { | ||||
|         char key[] = "example"; | ||||
|         doc[0][key] = 1; | ||||
|         doc[1][key] = 2; | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == | ||||
|               JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16); | ||||
|  | ||||
|         const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str(); | ||||
|         const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str(); | ||||
|         CHECK(key1 != key2); | ||||
|       } | ||||
|  | ||||
|       SECTION("Arduino String") { | ||||
|         doc[0][String("example")] = 1; | ||||
|         doc[1][String("example")] = 2; | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == | ||||
|               JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16); | ||||
|  | ||||
|         const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str(); | ||||
|         const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str(); | ||||
|         CHECK(key1 != key2); | ||||
|       } | ||||
|  | ||||
|       SECTION("Flash string") { | ||||
|         doc[0][F("example")] = 1; | ||||
|         doc[1][F("example")] = 2; | ||||
|  | ||||
|         CHECK(doc.memoryUsage() == | ||||
|               JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16); | ||||
|  | ||||
|         const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str(); | ||||
|         const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str(); | ||||
|         CHECK(key1 != key2); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user