void test_min_heap(void) { BinaryHeap *heap; int *val; int i; heap = binary_heap_new(BINARY_HEAP_TYPE_MIN, int_compare); /* Push a load of values onto the heap */ for (i=0; i<NUM_TEST_VALUES; ++i) { test_array[i] = i; assert(binary_heap_insert(heap, &test_array[i]) != 0); } /* Pop values off the heap and check they are in order */ i = -1; while (binary_heap_num_entries(heap) > 0) { val = (int *) binary_heap_pop(heap); assert(*val == i + 1); i = *val; } /* Test popping from an empty heap */ assert(binary_heap_num_entries(heap) == 0); assert(binary_heap_pop(heap) == BINARY_HEAP_NULL); binary_heap_free(heap); }
void test_max_heap(void) { BinaryHeap *heap; int *val; int i; heap = binary_heap_new(BINARY_HEAP_TYPE_MAX, int_compare); /* Push a load of values onto the heap */ for (i=0; i<NUM_TEST_VALUES; ++i) { test_array[i] = i; assert(binary_heap_insert(heap, &test_array[i]) != 0); } /* Pop values off the heap and check they are in order */ i = NUM_TEST_VALUES; while (binary_heap_num_entries(heap) > 0) { val = (int *) binary_heap_pop(heap); assert(*val == i - 1); i = *val; } binary_heap_free(heap); }
int main (int argc, char *argv[]) { int i; struct binary_heap *binary_heap; binary_heap = binary_heap_create(0, compare, NULL); if (binary_heap == NULL) { return -1; } for (i = 1; i < argc; i++) { binary_heap_insert(binary_heap, argv[i]); } printf("%s ", (char *) binary_heap_pop(binary_heap)); printf("%s ", (char *) binary_heap_pop(binary_heap)); printf("%s ", (char *) binary_heap_pop(binary_heap)); binary_heap_destroy(binary_heap); return 0; }
void test_out_of_memory(void) { BinaryHeap *heap; int *value; int values[] = { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; int i; /* Allocate a heap and fill to the default limit */ heap = binary_heap_new(BINARY_HEAP_TYPE_MIN, int_compare); alloc_test_set_limit(0); for (i=0; i<16; ++i) { assert(binary_heap_insert(heap, &values[i]) != 0); } assert(binary_heap_num_entries(heap) == 16); /* Check that we cannot add new values */ for (i=0; i<16; ++i) { assert(binary_heap_insert(heap, &values[i]) == 0); assert(binary_heap_num_entries(heap) == 16); } /* Check that we can read the values back out again and they * are in the right order. */ for (i=0; i<16; ++i) { value = binary_heap_pop(heap); assert(*value == i); } assert(binary_heap_num_entries(heap) == 0); binary_heap_free(heap); }