Files
ArduinoJson/test/StaticMemoryPool/alloc.cpp

55 lines
1.3 KiB
C++
Raw Normal View History

// ArduinoJson - arduinojson.org
2018-01-05 09:20:01 +01:00
// Copyright Benoit Blanchon 2014-2018
// MIT License
2018-09-03 16:14:21 +02:00
#include <ArduinoJson/Memory/StaticMemoryPool.hpp>
#include <catch.hpp>
using namespace ARDUINOJSON_NAMESPACE;
static bool isAligned(void *ptr) {
const size_t mask = sizeof(void *) - 1;
size_t addr = reinterpret_cast<size_t>(ptr);
return (addr & mask) == 0;
}
2018-09-03 16:14:21 +02:00
TEST_CASE("StaticMemoryPool::alloc()") {
StaticMemoryPool<64> memoryPool;
2017-06-17 14:50:21 +02:00
SECTION("Returns different addresses") {
2018-09-03 16:14:21 +02:00
void *p1 = memoryPool.alloc(1);
void *p2 = memoryPool.alloc(1);
2017-06-17 14:50:21 +02:00
REQUIRE(p1 != p2);
}
2017-06-17 14:50:21 +02:00
SECTION("Returns non-NULL when using full capacity") {
2018-09-03 16:14:21 +02:00
void *p = memoryPool.alloc(64);
REQUIRE(0 != p);
}
2017-06-17 14:50:21 +02:00
SECTION("Returns NULL when full") {
2018-09-03 16:14:21 +02:00
memoryPool.alloc(64);
void *p = memoryPool.alloc(1);
REQUIRE(0 == p);
}
2018-09-03 16:14:21 +02:00
SECTION("Returns NULL when memoryPool is too small") {
void *p = memoryPool.alloc(65);
REQUIRE(0 == p);
}
2017-06-17 14:50:21 +02:00
SECTION("Returns aligned pointers") {
for (size_t size = 1; size <= sizeof(void *); size++) {
2018-09-03 16:14:21 +02:00
void *p = memoryPool.alloc(1);
REQUIRE(isAligned(p));
}
}
2017-06-17 14:50:21 +02:00
SECTION("Returns same address after clear()") {
2018-09-03 16:14:21 +02:00
void *p1 = memoryPool.alloc(1);
memoryPool.clear();
void *p2 = memoryPool.alloc(1);
2017-06-17 14:50:21 +02:00
REQUIRE(p1 == p2);
}
}