#pragma once #include void queue_test() { int i; int item; int length = 128; Queue *queue = make_queue(length); assert(queue_empty(queue)); for (i = 0; i < length - 1; i++) { queue_push(queue, i); } assert(queue_full(queue)); for (i = 0; i < 10; i++) { item = queue_pop(queue); assert(i == item); } assert(!queue_empty(queue)); assert(!queue_full(queue)); for (i = 0; i < 10; i++) { queue_push(queue, i); } assert(queue_full(queue)); for (i = 0; i < 10; i++) { item = queue_pop(queue); } assert(item == 19); } void empty_queue_test() { int i; pthread_t child[NUM_CHILDREN]; Shared *shared = make_shared(); child[1] = make_thread(consumer_entry, shared); sleep(1); child[0] = make_thread(producer_entry, shared); for (i = 0; i < NUM_CHILDREN; i++) { join_thread(child[i]); } } void *producer_positive(void *arg) { int i; Shared *shared = (Shared *)arg; for (i = 0; i < (QUEUE_LENGTH - 1) / 2; i++) { queue_push(shared->queue, 1); } pthread_exit(NULL); } void *producer_negative(void *arg) { int i; int item; Shared *shared = (Shared *)arg; for (i = 0; i < (QUEUE_LENGTH - 1) - ((QUEUE_LENGTH - 1) / 2); i++) { queue_push(shared->queue, -1); } pthread_exit(NULL); } void thread_safe_test() { int i; pthread_t child[NUM_CHILDREN]; Shared *shared = make_shared(); for (unsigned int k = 0; k < QUEUE_LENGTH; k++) { shared->queue->array[k] = 0; } child[0] = make_thread(producer_positive, shared); child[1] = make_thread(producer_negative, shared); for (i=0; iqueue->array[k])); was_zero = was_zero || !shared->queue->array[k]; } }