#include "wapp.h" #include "test_queue.h" #define CAPACITY 8 TestFuncResult test_queue_push(void) { I32Queue queue = wapp_queue(i32, CAPACITY); for (u64 i = 0; i < CAPACITY; ++i) { i32 item = (i32)i; wapp_queue_push(i32, &queue, &item); } b8 result = true; for (u64 i = 0; i < CAPACITY; ++i) { i32 *value = ((i32 *)(queue.items)) + i; result = result && value != NULL && *value == (i32)i; } return wapp_tester_result(result); } TestFuncResult test_queue_push_alloc(void) { Allocator arena = wapp_mem_arena_allocator_init(MiB(64)); I32Queue queue = wapp_queue(i32, CAPACITY); for (u64 i = 0; i < CAPACITY; ++i) { i32 item = (i32)i; wapp_queue_push(i32, &queue, &item); } b8 result = true; i32 item = 8; u64 new_capacity = CAPACITY * 2; I32Queue *new_queue = wapp_queue_push_alloc(i32, &arena, &queue, &item); if (new_queue && new_queue != &queue) { queue = *new_queue; } u64 capacity = wapp_queue_capacity(&queue); result = result && capacity == new_capacity; for (u64 i = 0; i < 2; ++i) { wapp_queue_pop(i32, &queue); } u64 remaining = wapp_queue_capacity(&queue) - queue.count; for (u64 i = 0; i < remaining; ++i) { item = remaining + i; wapp_queue_push(i32, &queue, &item); } ++item; new_queue = wapp_queue_push_alloc(i32, &arena, &queue, &item); if (new_queue && new_queue != &queue) { queue = *new_queue; } result = result && wapp_queue_capacity(&queue) == new_capacity * 2; i32 *arr = (i32 *)queue.items; for (u64 i = 0; i < queue.count; ++i) { // NOTE (Abdelrahman): First queue value is currently 2 result = result && arr[i] == (i32)(2 + i); } wapp_mem_arena_allocator_destroy(&arena); return wapp_tester_result(result); } TestFuncResult test_queue_pop(void) { I32Queue queue = wapp_queue(i32, CAPACITY); for (u64 i = 0; i < CAPACITY; ++i) { i32 item = (i32)i; wapp_queue_push(i32, &queue, &item); } b8 result = true; u64 half_count = queue.count / 2; for (u64 i = 0; i < half_count; ++i) { i32 *value = wapp_queue_pop(i32, &queue); result = result && value != NULL && *value == (i32)i; } for (u64 i = 0; i < half_count; ++i) { i32 item = (i32)i + CAPACITY; wapp_queue_push(i32, &queue, &item); } for (u64 i = 0; i < CAPACITY; ++i) { i32 *value = wapp_queue_pop(i32, &queue); result = result && value != NULL && *value == (i32)half_count + (i32)i; } return wapp_tester_result(result); }