alloc.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright Benoit Blanchon 2014-2017
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://bblanchon.github.io/ArduinoJson/
  6. // If you like this project, please add a star!
  7. #include <ArduinoJson.h>
  8. #include <catch.hpp>
  9. static bool isAligned(void *ptr) {
  10. const size_t mask = sizeof(void *) - 1;
  11. size_t addr = reinterpret_cast<size_t>(ptr);
  12. return (addr & mask) == 0;
  13. }
  14. TEST_CASE("StaticJsonBuffer::alloc()") {
  15. StaticJsonBuffer<64> buffer;
  16. SECTION("CapacityMatchTemplateParameter") {
  17. REQUIRE(64 == buffer.capacity());
  18. }
  19. SECTION("InitialSizeIsZero") {
  20. REQUIRE(0 == buffer.size());
  21. }
  22. SECTION("GrowsAfterAlloc") {
  23. buffer.alloc(1);
  24. REQUIRE(1U <= buffer.size());
  25. buffer.alloc(1);
  26. REQUIRE(2U <= buffer.size());
  27. }
  28. SECTION("DoesntGrowWhenFull") {
  29. buffer.alloc(64);
  30. buffer.alloc(1);
  31. REQUIRE(64 == buffer.size());
  32. }
  33. SECTION("DoesntGrowWhenTooSmall") {
  34. buffer.alloc(65);
  35. REQUIRE(0 == buffer.size());
  36. }
  37. SECTION("ReturnsNonNull") {
  38. void *p = buffer.alloc(64);
  39. REQUIRE(0 != p);
  40. }
  41. SECTION("ReturnsNullWhenFull") {
  42. buffer.alloc(64);
  43. void *p = buffer.alloc(1);
  44. REQUIRE(0 == p);
  45. }
  46. SECTION("ReturnsNullWhenTooSmall") {
  47. void *p = buffer.alloc(65);
  48. REQUIRE(0 == p);
  49. }
  50. SECTION("Alignment") {
  51. for (size_t size = 1; size <= sizeof(void *); size++) {
  52. void *p = buffer.alloc(1);
  53. REQUIRE(isAligned(p));
  54. }
  55. }
  56. }