2018-11-09 17:27:32 +01:00
|
|
|
// ArduinoJson - arduinojson.org
|
|
|
|
// Copyright Benoit Blanchon 2014-2018
|
|
|
|
// MIT License
|
|
|
|
|
2018-11-16 10:26:59 +01:00
|
|
|
#include <ArduinoJson/Memory/MemoryPool.hpp>
|
2018-11-09 17:27:32 +01:00
|
|
|
#include <catch.hpp>
|
|
|
|
|
|
|
|
using namespace ARDUINOJSON_NAMESPACE;
|
|
|
|
|
2018-11-16 10:26:59 +01:00
|
|
|
TEST_CASE("MemoryPool::allocFrozenString()") {
|
2018-11-09 17:27:32 +01:00
|
|
|
const size_t poolCapacity = 64;
|
2018-11-27 17:28:19 +01:00
|
|
|
const size_t longestString = poolCapacity;
|
2018-11-16 10:26:59 +01:00
|
|
|
char buffer[poolCapacity];
|
|
|
|
MemoryPool pool(buffer, poolCapacity);
|
2018-11-09 17:27:32 +01:00
|
|
|
|
|
|
|
SECTION("Returns different addresses") {
|
2018-11-27 17:28:19 +01:00
|
|
|
char *a = pool.allocFrozenString(1);
|
|
|
|
char *b = pool.allocFrozenString(1);
|
2018-11-09 17:27:32 +01:00
|
|
|
REQUIRE(a != b);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Returns NULL when full") {
|
2018-11-27 17:28:19 +01:00
|
|
|
void *p1 = pool.allocFrozenString(longestString);
|
|
|
|
REQUIRE(p1 != 0);
|
|
|
|
|
|
|
|
void *p2 = pool.allocFrozenString(1);
|
|
|
|
REQUIRE(p2 == 0);
|
2018-11-09 17:27:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Returns NULL when pool is too small") {
|
|
|
|
void *p = pool.allocFrozenString(longestString + 1);
|
|
|
|
REQUIRE(0 == p);
|
|
|
|
}
|
|
|
|
|
2018-11-16 10:26:59 +01:00
|
|
|
SECTION("Returns NULL when buffer is NULL") {
|
|
|
|
MemoryPool pool2(0, poolCapacity);
|
|
|
|
REQUIRE(0 == pool2.allocFrozenString(2));
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Returns NULL when capacity is 0") {
|
|
|
|
MemoryPool pool2(buffer, 0);
|
|
|
|
REQUIRE(0 == pool2.allocFrozenString(2));
|
|
|
|
}
|
|
|
|
|
2018-11-09 17:27:32 +01:00
|
|
|
SECTION("Returns same address after clear()") {
|
2018-11-27 17:28:19 +01:00
|
|
|
void *a = pool.allocFrozenString(1);
|
2018-11-09 17:27:32 +01:00
|
|
|
pool.clear();
|
2018-11-27 17:28:19 +01:00
|
|
|
void *b = pool.allocFrozenString(1);
|
2018-11-09 17:27:32 +01:00
|
|
|
|
|
|
|
REQUIRE(a == b);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Can use full capacity when fresh") {
|
2018-11-27 17:28:19 +01:00
|
|
|
void *a = pool.allocFrozenString(longestString);
|
2018-11-09 17:27:32 +01:00
|
|
|
|
|
|
|
REQUIRE(a != 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Can use full capacity after clear") {
|
|
|
|
pool.allocFrozenString(longestString);
|
|
|
|
pool.clear();
|
|
|
|
|
2018-11-27 17:28:19 +01:00
|
|
|
void *a = pool.allocFrozenString(longestString);
|
2018-11-09 17:27:32 +01:00
|
|
|
|
|
|
|
REQUIRE(a != 0);
|
|
|
|
}
|
|
|
|
}
|