size.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson/Memory/StaticMemoryPool.hpp>
  5. #include <catch.hpp>
  6. using namespace ARDUINOJSON_NAMESPACE;
  7. TEST_CASE("StaticMemoryPool::size()") {
  8. SECTION("Capacity equals template parameter") {
  9. const size_t capacity = 64;
  10. StaticMemoryPool<capacity> memoryPool;
  11. REQUIRE(capacity == memoryPool.capacity());
  12. }
  13. SECTION("Initial size is 0") {
  14. StaticMemoryPool<32> memoryPool;
  15. REQUIRE(0 == memoryPool.size());
  16. }
  17. SECTION("Increases after allocFrozenString()") {
  18. StaticMemoryPool<128> memoryPool;
  19. memoryPool.allocFrozenString(0);
  20. REQUIRE(memoryPool.size() == JSON_STRING_SIZE(0));
  21. memoryPool.allocFrozenString(0);
  22. REQUIRE(memoryPool.size() == 2 * JSON_STRING_SIZE(0));
  23. }
  24. SECTION("Decreases after freeVariant()") {
  25. StaticMemoryPool<128> memoryPool;
  26. VariantSlot* a = memoryPool.allocVariant();
  27. VariantSlot* b = memoryPool.allocVariant();
  28. memoryPool.freeVariant(b);
  29. REQUIRE(memoryPool.size() == sizeof(VariantSlot));
  30. memoryPool.freeVariant(a);
  31. REQUIRE(memoryPool.size() == 0);
  32. }
  33. SECTION("Decreases after calling freeString() in order") {
  34. StaticMemoryPool<128> memoryPool;
  35. StringSlot* a = memoryPool.allocFrozenString(5);
  36. REQUIRE(a != 0);
  37. StringSlot* b = memoryPool.allocFrozenString(6);
  38. REQUIRE(b != 0);
  39. memoryPool.freeString(b);
  40. REQUIRE(memoryPool.size() == JSON_STRING_SIZE(5));
  41. memoryPool.freeString(a);
  42. REQUIRE(memoryPool.size() == 0);
  43. }
  44. SECTION("Decreases after calling freeString() in reverse order") {
  45. StaticMemoryPool<128> memoryPool;
  46. StringSlot* a = memoryPool.allocFrozenString(5);
  47. REQUIRE(a != 0);
  48. StringSlot* b = memoryPool.allocFrozenString(6);
  49. REQUIRE(b != 0);
  50. memoryPool.freeString(a);
  51. REQUIRE(memoryPool.size() == JSON_STRING_SIZE(6));
  52. memoryPool.freeString(b);
  53. REQUIRE(memoryPool.size() == 0);
  54. }
  55. SECTION("Doesn't grow when memory pool is full") {
  56. const size_t variantCount = 4;
  57. const size_t capacity = variantCount * sizeof(VariantSlot);
  58. StaticMemoryPool<capacity> memoryPool;
  59. for (size_t i = 0; i < variantCount; i++) memoryPool.allocVariant();
  60. REQUIRE(capacity == memoryPool.size());
  61. memoryPool.allocVariant();
  62. REQUIRE(capacity == memoryPool.size());
  63. }
  64. }