forked from vieter-v/libvieter
test(heap): add random test that exposes some faults
This commit is contained in:
parent
6845e67cb6
commit
63100c5b99
2 changed files with 70 additions and 5 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#include "acutest.h"
|
||||
#include "vieter_heap.h"
|
||||
#include "vieter_heap_tree.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define TEST_SIZE(heap, size) \
|
||||
TEST_CHECK(vieter_heap_size(heap) == size); \
|
||||
|
|
@ -76,10 +77,57 @@ void test_pop() {
|
|||
vieter_heap_free(heap);
|
||||
}
|
||||
|
||||
int uint64_t_compare(const void *a, const void *b) {
|
||||
if ((*(uint64_t *)a) < (*(uint64_t *)b)) {
|
||||
return -1;
|
||||
} else if ((*(uint64_t *)a) < (*(uint64_t *)b)) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void test_pop_random() {
|
||||
srand(0);
|
||||
|
||||
vieter_heap *heap = vieter_heap_init();
|
||||
|
||||
uint64_t *numbers = malloc(500 * sizeof(uint64_t));
|
||||
uint64_t num;
|
||||
|
||||
for (uint64_t i = 0; i < 500; i++) {
|
||||
num = rand();
|
||||
vieter_heap_insert(heap, num, (void *)num);
|
||||
TEST_SIZE(heap, i + 1);
|
||||
|
||||
numbers[i] = num;
|
||||
}
|
||||
|
||||
|
||||
qsort(numbers, 500, sizeof(uint64_t), uint64_t_compare);
|
||||
|
||||
void *data = NULL;
|
||||
|
||||
for (uint64_t i = 0; i < 500; i++) {
|
||||
TEST_CHECK(vieter_heap_peek(&data, heap) == vieter_heap_ok);
|
||||
TEST_CHECK(data == (void *)numbers[i]);
|
||||
|
||||
data = NULL;
|
||||
|
||||
TEST_CHECK(vieter_heap_pop(&data, heap) == vieter_heap_ok);
|
||||
TEST_CHECK(data == (void *)numbers[i]);
|
||||
TEST_SIZE(heap, (uint64_t)500 - i - 1);
|
||||
}
|
||||
|
||||
vieter_heap_free(heap);
|
||||
free(numbers);
|
||||
}
|
||||
|
||||
TEST_LIST = {
|
||||
{"init", test_init},
|
||||
{"merge same order", test_merge_same_order},
|
||||
{"insert", test_insert},
|
||||
{"pop", test_pop},
|
||||
{"pop random", test_pop_random},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue