diff --git a/test/tree/test_tree.c b/test/tree/test_tree.c index 10235cb..9153a3c 100644 --- a/test/tree/test_tree.c +++ b/test/tree/test_tree.c @@ -64,6 +64,40 @@ void test_remove() { vieter_tree_free(tree); } +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_random() { + const uint64_t n = 500; + srand(0); + + vieter_tree *tree = vieter_tree_init(); + + uint64_t *numbers = malloc(n * sizeof(uint64_t)); + uint64_t num; + void *out = NULL; + + for (uint64_t i = 0; i < n; i++) { + num = rand(); + vieter_tree_insert(tree, num, (void *)num); + TEST_SIZE(tree, i + 1); + TEST_CHECK(vieter_tree_validate(tree)); + TEST_CHECK(vieter_tree_search(&out, tree, i) == vieter_tree_ok); + TEST_CHECK(out == (void *)num); + + numbers[i] = num; + } + + qsort(numbers, n, sizeof(uint64_t), uint64_t_compare); +} + TEST_LIST = { {"tree init", test_init}, {"tree insert", test_insert},