alloc.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2023
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. static bool isAligned(void *ptr) {
  7. const size_t mask = sizeof(void *) - 1;
  8. size_t addr = reinterpret_cast<size_t>(ptr);
  9. return (addr & mask) == 0;
  10. }
  11. TEST_CASE("StaticJsonBuffer::alloc()") {
  12. StaticJsonBuffer<64> buffer;
  13. SECTION("Returns different addresses") {
  14. void *p1 = buffer.alloc(1);
  15. void *p2 = buffer.alloc(1);
  16. REQUIRE(p1 != p2);
  17. }
  18. SECTION("Returns non-NULL when using full capacity") {
  19. void *p = buffer.alloc(64);
  20. REQUIRE(0 != p);
  21. }
  22. SECTION("Returns NULL when full") {
  23. buffer.alloc(64);
  24. void *p = buffer.alloc(1);
  25. REQUIRE(0 == p);
  26. }
  27. SECTION("Returns NULL when buffer is too small") {
  28. void *p = buffer.alloc(65);
  29. REQUIRE(0 == p);
  30. }
  31. SECTION("Returns aligned pointers") {
  32. for (size_t size = 1; size <= sizeof(void *); size++) {
  33. void *p = buffer.alloc(1);
  34. REQUIRE(isAligned(p));
  35. }
  36. }
  37. SECTION("Returns same address after clear()") {
  38. void *p1 = buffer.alloc(1);
  39. buffer.clear();
  40. void *p2 = buffer.alloc(1);
  41. REQUIRE(p1 == p2);
  42. }
  43. }