Test that DynamicJsonBuffer.size() is the sum of all blocks

This commit is contained in:
Benoit Blanchon
2014-12-13 21:02:42 +01:00
parent d19a34152f
commit 13e907c894
2 changed files with 13 additions and 6 deletions

View File

@ -15,11 +15,13 @@ namespace ArduinoJson {
// more suitable for embedded systems. // more suitable for embedded systems.
class DynamicJsonBuffer : public JsonBuffer { class DynamicJsonBuffer : public JsonBuffer {
public: public:
explicit DynamicJsonBuffer() : _next(NULL), _size(0) {} DynamicJsonBuffer() : _next(NULL), _size(0) {}
size_t size() const { return _size; } ~DynamicJsonBuffer() { delete _next; }
size_t blockCount() const { return _next ? _next->blockCount() + 1 : 1; } size_t size() const { return _size + (_next ? _next->size() : 0); }
size_t blockCount() const { return 1 + (_next ? _next->blockCount() : 0); }
static const size_t BLOCK_CAPACITY = 32; static const size_t BLOCK_CAPACITY = 32;
@ -43,10 +45,11 @@ class DynamicJsonBuffer : public JsonBuffer {
_size += bytes; _size += bytes;
return p; return p;
} }
bool canAllocInOtherBlocks(size_t bytes) const { bool canAllocInOtherBlocks(size_t bytes) const {
// by design a DynamicJsonBuffer can't alloc a block bigger than // by design a DynamicJsonBuffer can't alloc a block bigger than
// BLOCK_CAPACITY // BLOCK_CAPACITY
return bytes < BLOCK_CAPACITY; return bytes <= BLOCK_CAPACITY;
} }
void* allocInOtherBlocks(size_t bytes) { void* allocInOtherBlocks(size_t bytes) {

View File

@ -29,6 +29,8 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, SizeIncreasesAfterAlloc) {
ASSERT_EQ(1, buffer.size()); ASSERT_EQ(1, buffer.size());
buffer.alloc(1); buffer.alloc(1);
ASSERT_EQ(2, buffer.size()); ASSERT_EQ(2, buffer.size());
buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
ASSERT_EQ(2 + DynamicJsonBuffer::BLOCK_CAPACITY, buffer.size());
} }
TEST_F(DynamicJsonBuffer_Basic_Tests, BlockCountDoesntChangeWhenNotFull) { TEST_F(DynamicJsonBuffer_Basic_Tests, BlockCountDoesntChangeWhenNotFull) {
@ -43,8 +45,10 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, BlockCountChangesWhenFull) {
} }
TEST_F(DynamicJsonBuffer_Basic_Tests, CanAllocLessThanBlockCapacity) { TEST_F(DynamicJsonBuffer_Basic_Tests, CanAllocLessThanBlockCapacity) {
void* p = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY); void* p1 = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
ASSERT_TRUE(p); ASSERT_TRUE(p1);
void* p2 = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
ASSERT_TRUE(p2);
} }
TEST_F(DynamicJsonBuffer_Basic_Tests, CantAllocMoreThanBlockCapacity) { TEST_F(DynamicJsonBuffer_Basic_Tests, CantAllocMoreThanBlockCapacity) {