#include #include static int init_destroy(void) { bh_queue_t queue; bh_queue_init(&queue); bh_unit_assert(queue.size == 0); bh_unit_assert(queue.capacity == 0); bh_unit_assert(queue.data == NULL); bh_unit_assert(queue.head == queue.tail); bh_queue_destroy(&queue); return 0; } static int new_free(void) { bh_queue_t *queue; queue = bh_queue_new(); bh_unit_assert(queue != NULL); bh_unit_assert(queue->size == 0); bh_unit_assert(queue->capacity == 0); bh_unit_assert(queue->data == NULL); bh_unit_assert(queue->head == queue->tail); bh_queue_free(queue); return 0; } static int grow_shrink(void) { bh_queue_t *queue; void *old_data; queue = bh_queue_new(); bh_unit_assert(queue != NULL); /* Reserve 1024 elements and insert item into queue */ bh_unit_assert(bh_queue_reserve(queue, 1024) == 0); bh_unit_assert(bh_queue_insert(queue, BH_INT_TO_PTR(1337)) == 0); bh_unit_assert(queue->capacity >= 1024); bh_unit_assert(queue->size == 1); bh_unit_assert(bh_queue_empty(queue) == 0); bh_unit_assert(queue->data != NULL); /* Check queue content */ bh_unit_assert(BH_PTR_TO_INT(bh_queue_front(queue)) == 1337); old_data = queue->data; /* Grow queue */ bh_unit_assert(bh_queue_reserve(queue, 8192) == 0); bh_unit_assert(queue->capacity >= 8192); bh_unit_assert(queue->size == 1); bh_unit_assert(bh_queue_empty(queue) == 0); bh_unit_assert(queue->data != NULL); bh_unit_assert(queue->data != old_data); /* Check queue content */ bh_unit_assert(BH_PTR_TO_INT(bh_queue_front(queue)) == 1337); old_data = queue->data; /* Shrink the queue */ bh_unit_assert(bh_queue_reserve(queue, 0) == 0); bh_unit_assert(queue->capacity >= 1 && queue->capacity <= 8192); bh_unit_assert(queue->size == 1); bh_unit_assert(bh_queue_empty(queue) == 0); bh_unit_assert(queue->data != NULL); bh_unit_assert(queue->data != old_data); /* Check queue content */ bh_unit_assert(BH_PTR_TO_INT(bh_queue_front(queue)) == 1337); /* Shrink to 0 (deallocate) */ bh_queue_clear(queue); bh_unit_assert(queue->size == 0); bh_unit_assert(bh_queue_reserve(queue, 0) == 0); bh_unit_assert(queue->capacity == 0); bh_unit_assert(queue->size == 0); bh_unit_assert(bh_queue_empty(queue) == 1); bh_unit_assert(queue->data == NULL); bh_queue_free(queue); return 0; } static int insert_remove(void) { bh_queue_t *queue; size_t i, added, removed; void *iter; queue = bh_queue_new(); bh_unit_assert(queue != NULL); added = 0; for (i = 0; i < 256; i++) { added += i * 2; bh_unit_assert(bh_queue_insert(queue, BH_INT_TO_PTR(i * 2)) == 0); } removed = 0; iter = bh_queue_iter_next(queue, NULL); while (iter) { removed += BH_PTR_TO_INT(bh_queue_front(queue)); bh_queue_remove(queue); iter = bh_queue_iter_next(queue, NULL); } bh_unit_assert(added == removed); bh_unit_assert(queue->size == 0); bh_queue_free(queue); return 0; } static int rollover(void) { bh_queue_t *queue; size_t i, j, capacity; queue = bh_queue_new(); bh_unit_assert(queue != NULL); bh_unit_assert(bh_queue_reserve(queue, 128) == 0); capacity = queue->capacity; for (i = 0; i < 128; i++) { for (j = 0; j < 3; j++) bh_queue_remove(queue); for (j = 0; j < 4 && queue->size < 128; j++) bh_unit_assert(bh_queue_insert(queue, BH_INT_TO_PTR(i * 4 + j)) == 0); } bh_unit_assert(queue->size == 128); bh_unit_assert(queue->capacity == capacity); bh_queue_free(queue); return 0; } static int fields(void) { bh_queue_t *queue; queue = bh_queue_new(); bh_unit_assert(queue != NULL); bh_unit_assert(bh_queue_insert(queue, BH_INT_TO_PTR(1337)) == 0); bh_unit_assert(queue->size == 1); bh_unit_assert(queue->capacity >= 1); bh_unit_assert(bh_queue_size(queue) == queue->size); bh_unit_assert(bh_queue_capacity(queue) == queue->capacity); bh_queue_free(queue); return 0; } int main(int argc, char **argv) { (void)argc; (void)argv; bh_unit_add("init_destroy", init_destroy); bh_unit_add("new_free", new_free); bh_unit_add("grow_shrink", grow_shrink); bh_unit_add("insert_remove", insert_remove); bh_unit_add("rollover", rollover); bh_unit_add("fields", fields); return bh_unit_run(); }