Log DqnJson in unit test, convert MemStack to use constructor

This commit is contained in:
Doyle T 2018-07-18 00:47:13 +10:00
parent cbf8e37295
commit 0bfca792ee
3 changed files with 260 additions and 652 deletions

View File

@ -1,5 +1,6 @@
void DqnJson_Test() void DqnJson_Test()
{ {
LOG_HEADER();
char const json[] = char const json[] =
R"FOO( R"FOO(
{ {
@ -114,4 +115,5 @@ void DqnJson_Test()
DQN_ASSERT(DQN_SLICE_CMP(it.value, DQN_SLICE("123"), Dqn::IgnoreCase::No)); DQN_ASSERT(DQN_SLICE_CMP(it.value, DQN_SLICE("123"), Dqn::IgnoreCase::No));
} }
} }
Log(Status::Ok, "DqnJson sample structure parsed");
} }

View File

@ -1615,7 +1615,8 @@ void DqnArray_Test()
if (1) if (1)
{ {
DqnMemStack stack = {}; stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard); auto stack =
DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
if (1) if (1)
{ {
@ -1765,8 +1766,7 @@ void DqnFile_Test()
file->Close(); file->Close();
} }
DqnMemStack memStack = {}; auto memStack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(memStack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
// Read data back in // Read data back in
for (u32 i = 0; i < DQN_ARRAY_COUNT(fileNames); i++) for (u32 i = 0; i < DQN_ARRAY_COUNT(fileNames); i++)
{ {
@ -1900,8 +1900,7 @@ FILE_SCOPE void DqnJobQueue_Test()
LOG_HEADER(); LOG_HEADER();
globalDebugCounter = 0; globalDebugCounter = 0;
DqnMemStack memStack = {}; auto memStack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(memStack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
u32 numThreads, numCores; u32 numThreads, numCores;
DqnOS_GetThreadsAndCores(&numCores, &numThreads); DqnOS_GetThreadsAndCores(&numCores, &numThreads);
@ -1945,8 +1944,7 @@ void DqnQuickSort_Test()
auto state = DqnRndPCG(); auto state = DqnRndPCG();
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_KILOBYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_KILOBYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
// Create array of ints // Create array of ints
u32 numInts = 1000000; u32 numInts = 1000000;
@ -2330,8 +2328,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Check Alignment // Check Alignment
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
i32 const ALIGN64 = 64; i32 const ALIGN64 = 64;
i32 const ALIGN16 = 16; i32 const ALIGN16 = 16;
@ -2368,8 +2365,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Check Non-Expandable // Check Non-Expandable
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::NonExpandable);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::NonExpandable));
auto *result1 = stack.Push(DQN_MEGABYTE(2)); auto *result1 = stack.Push(DQN_MEGABYTE(2));
DQN_ASSERT(result1 == nullptr); DQN_ASSERT(result1 == nullptr);
DQN_ASSERT(stack.block->prevBlock == nullptr); DQN_ASSERT(stack.block->prevBlock == nullptr);
@ -2381,9 +2377,8 @@ FILE_SCOPE void DqnMemStack_Test()
// Check Expansion // Check Expansion
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes)); DQN_ASSERT(stack.tracker.GetBoundsGuardSize() == 0);
DQN_ASSERT(stack.metadata.GetBoundsGuardSize() == 0);
auto *oldBlock = stack.block; auto *oldBlock = stack.block;
DQN_ASSERT(oldBlock); DQN_ASSERT(oldBlock);
@ -2407,8 +2402,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Check temporary regions // Check temporary regions
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
DqnMemStack::Block *blockToReturnTo = stack.block; DqnMemStack::Block *blockToReturnTo = stack.block;
auto headBefore = blockToReturnTo->head; auto headBefore = blockToReturnTo->head;
@ -2441,9 +2435,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Check temporary regions keep state // Check temporary regions keep state
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
DqnMemStack::Block *blockToReturnTo = stack.block; DqnMemStack::Block *blockToReturnTo = stack.block;
auto headBefore = blockToReturnTo->head; auto headBefore = blockToReturnTo->head;
auto tailBefore = blockToReturnTo->tail; auto tailBefore = blockToReturnTo->tail;
@ -2476,8 +2468,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Check temporary regions with tail and head pushes // Check temporary regions with tail and head pushes
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
auto *pop1 = stack.Push(222); auto *pop1 = stack.Push(222);
auto *pop2 = stack.PushOnTail(333); auto *pop2 = stack.PushOnTail(333);
@ -2523,27 +2514,13 @@ FILE_SCOPE void DqnMemStack_Test()
// Check Fixed Mem Init // Check Fixed Mem Init
if (1) if (1)
{ {
// Check fail on insufficient size
if (1)
{
u8 memBuf[sizeof(DqnMemStack::Block) - 1] = {};
DqnMemStack stack = {};
auto result = stack.Init(&(memBuf[0]), DQN_ARRAY_COUNT(memBuf), Dqn::ZeroClear::No);
DQN_ASSERT(result == false);
DQN_ASSERT(stack.block == nullptr);
stack.Free();
}
// Check success // Check success
if (1) if (1)
{ {
i32 const bufSize = sizeof(DqnMemStack::Block) * 5; isize const bufSize = sizeof(DqnMemStack::Block) * 5;
u8 memBuf[bufSize] = {}; char buf[bufSize] = {};
DqnMemStack stack = {}; auto stack = DqnMemStack(&buf, bufSize, Dqn::ZeroClear::No);
auto result = stack.Init(&(memBuf[0]), bufSize, Dqn::ZeroClear::No);
DQN_ASSERT(result == true);
DQN_ASSERT(stack.block); DQN_ASSERT(stack.block);
DQN_ASSERT(stack.block->prevBlock == false); DQN_ASSERT(stack.block->prevBlock == false);
DQN_ASSERT(stack.tempRegionCount == 0); DQN_ASSERT(stack.tempRegionCount == 0);
@ -2569,11 +2546,11 @@ FILE_SCOPE void DqnMemStack_Test()
// Check Freeing Blocks // Check Freeing Blocks
if (1) if (1)
{ {
DqnMemStack stack = {};
usize size = 32; usize size = 32;
usize additionalSize = DqnMemStack::MINIMUM_BLOCK_SIZE; usize additionalSize = DqnMemStack::MINIMUM_BLOCK_SIZE;
DqnMemAPI heap = DqnMemAPI::HeapAllocator(); DqnMemAPI heap = DqnMemAPI::HeapAllocator();
DQN_ASSERT(stack.Init(size, Dqn::ZeroClear::Yes, 0, &heap));
auto stack = DqnMemStack(size, Dqn::ZeroClear::Yes, 0, &heap);
auto *block1 = stack.block; auto *block1 = stack.block;
size += additionalSize; size += additionalSize;
@ -2622,15 +2599,14 @@ FILE_SCOPE void DqnMemStack_Test()
// Check bounds guard places magic values // Check bounds guard places magic values
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard)); char *result = static_cast<char *>(stack.Push(64));
auto *result = stack.Push(64);
// TODO(doyle): check head and tail are adjacent to the bounds of the allocation // TODO(doyle): check head and tail are adjacent to the bounds of the allocation
u32 *head = stack.metadata.PtrToHeadBoundsGuard((u8 *)result); u32 *head = stack.tracker.PtrToHeadBoundsGuard(result);
u32 *tail = stack.metadata.PtrToTailBoundsGuard((u8 *)result); u32 *tail = stack.tracker.PtrToTailBoundsGuard(result);
DQN_ASSERT(*head == DqnAllocatorMetadata::HEAD_GUARD_VALUE); DQN_ASSERT(*head == DqnMemTracker::HEAD_GUARD_VALUE);
DQN_ASSERT(*tail == DqnAllocatorMetadata::TAIL_GUARD_VALUE); DQN_ASSERT(*tail == DqnMemTracker::TAIL_GUARD_VALUE);
stack.Free(); stack.Free();
Log(Status::Ok, "Bounds guards are placed adjacent and have magic values."); Log(Status::Ok, "Bounds guards are placed adjacent and have magic values.");
@ -2641,8 +2617,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Push to tail and head // Push to tail and head
if (1) if (1)
{ {
DqnMemStack stack = {}; DqnMemStack stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
auto *result1 = stack.Push(100); auto *result1 = stack.Push(100);
auto *result2 = stack.PushOnTail(100); auto *result2 = stack.PushOnTail(100);
@ -2669,8 +2644,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Push too much to tail causes expansion // Push too much to tail causes expansion
if (1) if (1)
{ {
DqnMemStack stack = {}; DqnMemStack stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
auto *result1 = stack.Push(100); auto *result1 = stack.Push(100);
DQN_ASSERT(stack.block->prevBlock == nullptr); DQN_ASSERT(stack.block->prevBlock == nullptr);
@ -2700,8 +2674,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Push too much to tail fails to expand when non expandable // Push too much to tail fails to expand when non expandable
if (1) if (1)
{ {
DqnMemStack stack = {}; DqnMemStack stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::NonExpandable);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::NonExpandable));
auto *result1 = stack.Push(100); auto *result1 = stack.Push(100);
DQN_ASSERT(stack.block->prevBlock == nullptr); DQN_ASSERT(stack.block->prevBlock == nullptr);
@ -2738,8 +2711,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Using push on head // Using push on head
if (1) if (1)
{ {
DqnMemStack stack = {}; DqnMemStack stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
auto *api = &stack.myHeadAPI; auto *api = &stack.myHeadAPI;
auto *blockBefore = stack.block; auto *blockBefore = stack.block;
@ -2769,8 +2741,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Using push on tail // Using push on tail
if (1) if (1)
{ {
DqnMemStack stack = {}; DqnMemStack stack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
auto *api = &stack.myHeadAPI; auto *api = &stack.myHeadAPI;
auto *blockBefore = stack.block; auto *blockBefore = stack.block;
@ -2805,8 +2776,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Using push on head // Using push on head
if (1) if (1)
{ {
DqnMemStack stack = {}; auto stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
auto *api = &stack.myHeadAPI; auto *api = &stack.myHeadAPI;
auto *blockBefore = stack.block; auto *blockBefore = stack.block;
@ -2835,8 +2805,7 @@ FILE_SCOPE void DqnMemStack_Test()
// Using push on tail // Using push on tail
if (1) if (1)
{ {
DqnMemStack stack = {}; DqnMemStack stack = DqnMemStack(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard);
DQN_ASSERT(stack.Init(DQN_MEGABYTE(1), Dqn::ZeroClear::Yes, DqnMemStack::Flag::BoundsGuard));
auto *api = &stack.myHeadAPI; auto *api = &stack.myHeadAPI;
auto *blockBefore = stack.block; auto *blockBefore = stack.block;

745
dqn.h

File diff suppressed because it is too large Load Diff