enable_string_deduplication_0.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2023, Benoit BLANCHON
  3. // MIT License
  4. #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
  5. #define ARDUINOJSON_ENABLE_PROGMEM 1
  6. #define ARDUINOJSON_ENABLE_STRING_DEDUPLICATION 0
  7. #include <ArduinoJson.h>
  8. #include <catch.hpp>
  9. TEST_CASE("ARDUINOJSON_ENABLE_STRING_DEDUPLICATION = 0") {
  10. StaticJsonDocument<1024> doc;
  11. SECTION("deserializeJson()") {
  12. SECTION("Deduplicate values") {
  13. deserializeJson(doc, "[\"example\",\"example\"]");
  14. CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16);
  15. CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
  16. }
  17. SECTION("Deduplicate keys") {
  18. deserializeJson(doc, "[{\"example\":1},{\"example\":2}]");
  19. CHECK(doc.memoryUsage() ==
  20. 2 * JSON_OBJECT_SIZE(1) + JSON_ARRAY_SIZE(2) + 16);
  21. const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
  22. const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
  23. CHECK(key1 != key2);
  24. }
  25. }
  26. SECTION("JsonDocument") {
  27. SECTION("values") {
  28. SECTION("std::string") {
  29. doc.add(std::string("example"));
  30. doc.add(std::string("example"));
  31. CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16);
  32. CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
  33. }
  34. SECTION("char*") {
  35. char value[] = "example";
  36. doc.add(value);
  37. doc.add(value);
  38. CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16);
  39. CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
  40. }
  41. SECTION("Arduino String") {
  42. doc.add(String("example"));
  43. doc.add(String("example"));
  44. CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16);
  45. CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
  46. }
  47. SECTION("Flash string") {
  48. doc.add(F("example"));
  49. doc.add(F("example"));
  50. CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 16);
  51. CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
  52. }
  53. }
  54. SECTION("keys") {
  55. SECTION("std::string") {
  56. doc[0][std::string("example")] = 1;
  57. doc[1][std::string("example")] = 2;
  58. CHECK(doc.memoryUsage() ==
  59. JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16);
  60. const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
  61. const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
  62. CHECK(key1 != key2);
  63. }
  64. SECTION("char*") {
  65. char key[] = "example";
  66. doc[0][key] = 1;
  67. doc[1][key] = 2;
  68. CHECK(doc.memoryUsage() ==
  69. JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16);
  70. const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
  71. const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
  72. CHECK(key1 != key2);
  73. }
  74. SECTION("Arduino String") {
  75. doc[0][String("example")] = 1;
  76. doc[1][String("example")] = 2;
  77. CHECK(doc.memoryUsage() ==
  78. JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16);
  79. const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
  80. const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
  81. CHECK(key1 != key2);
  82. }
  83. SECTION("Flash string") {
  84. doc[0][F("example")] = 1;
  85. doc[1][F("example")] = 2;
  86. CHECK(doc.memoryUsage() ==
  87. JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(1) + 16);
  88. const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
  89. const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
  90. CHECK(key1 != key2);
  91. }
  92. }
  93. }
  94. }