#include #include #include #define QUEUE_IMPLEMENTATION #define QUEUE_DEBUG_ #include "../queue.h" #include "tests.h" void test_queue_new(void *input, test_result_t *res) { queue q = q_new(10); (void) input; tcheck(q.head == Q_EMPTY_IDX, res); tcheck(q.tail == Q_EMPTY_IDX, res); tcheck(q.size == 10, res); tcheck(q.items != NULL, res); } void test_queue_enqueue(void *input, test_result_t *res) { queue q = q_new(10); int *life = malloc(sizeof(int)); (void) input; *life = 42; q_enqueue(&q, life); tcheck(q.items[0] == life, res); } void test_queue_dequeue(void *input, test_result_t *res) { queue q = q_new(10); int *life = malloc(sizeof(int)); (void) input; *life = 42; q_enqueue(&q, life); tcheck(q_dequeue(&q) == life, res); } void test_queue_peek(void *input, test_result_t *res) { queue q = q_new(10); int *life = malloc(sizeof(int)); (void) input; *life = 42; q_enqueue(&q, life); tcheck(q_peek(&q) == life, res); } void test_queue_enqueue_many(void *input, test_result_t *res) { queue q = q_new(10); int i; int *num = NULL; (void) input; for (i = 0; i < 10; i++) { num = malloc(sizeof(int)); *num = i; q_enqueue(&q, num); } for (i = 0; i < 10; i++) { tcheckn(*( (int *) q.items[i] ) == i, res, i); } } void test_queue_dequeue_many(void *input, test_result_t *res) { queue q = q_new(10); int i; int *num = NULL; (void) input; for (i = 0; i < 10; i++) { num = malloc(sizeof(int)); *num = i; q_enqueue(&q, num); } for (i = 0; i < 10; i++) { tcheckn( *( (int *) q_dequeue(&q)) == i, res, i); } } void test_queue_is_empty(void *input, test_result_t *res) { queue q = q_new(10); int i; int *num = NULL; (void) input; tcheck(q_is_empty(&q), res); for (i = 0; i < 10; i++) { num = malloc(sizeof(int)); *num = i; q_enqueue(&q, num); tcheckn(!q_is_empty(&q), res, i); } } void test_queue_is_full(void *input, test_result_t *res) { queue q = q_new(10); int i; int *num = NULL; (void) input; tcheck(!q_is_full(&q), res); for (i = 0; i < 10; i++) { num = malloc(sizeof(int)); *num = i; q_enqueue(&q, num); tcheckn(i == 9 || !q_is_full(&q), res, i); } tcheckn(q_is_full(&q), res, 10); } void test_new_queue_dequeue(void *input, test_result_t *res) { queue q = q_new(10); (void) input; tcheck(q_dequeue(&q) == NULL, res); } void test_new_queue_peek(void *input, test_result_t *res) { queue q = q_new(10); (void) input; tcheck(q_peek(&q) == NULL, res); } int main(void) { test_data_t t[] = { { "new", test_queue_new }, { "enqueue", test_queue_enqueue }, { "dequeue", test_queue_dequeue }, { "peek", test_queue_peek }, { "enqueue_many", test_queue_enqueue_many }, { "dequeue_many", test_queue_dequeue_many }, { "is_empty", test_queue_is_empty}, { "is_full", test_queue_is_full}, { "new_dequeue_null", test_new_queue_dequeue }, { "new_peek_null", test_new_queue_peek }, {0} }; run_tests(t); return 0; }