-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcheck_red_black.c
60 lines (43 loc) · 1.07 KB
/
check_red_black.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdlib.h>
#include "red_black_internal.h"
#include "map_testing.h"
MAP_TESTS(red_black, "red_black", init_red_black ());
int max(int a, int b)
{
if(a > b) {
return a;
}
else {
return b;
}
}
int node_depth(red_black_node_t *node)
// Determine the maximum depth from this node
{
if(node == &null_node) {
return 0;
}
return 1 + max(node_depth(node->left), node_depth(node->right));
}
START_TEST(test_red_black_balancing)
{
red_black_t *tree = (red_black_t*) init_red_black();
const int n_entries = 256;
for(int i = 0; i < n_entries; i++) {
int key = rand();
map_set((map_t*) tree, key, (void *) (long) (i + 1));
}
ck_assert_int_lt(node_depth(tree->root), 8*2);
map_free((map_t*) tree);
}
END_TEST
Suite *red_black_suite()
{
Suite *s = suite_create("red_black");
TCase *red_black_core = red_black_tests_core_create();
TCase *red_black_extras = tcase_create("red_black_extras");
tcase_add_test(red_black_extras, test_red_black_balancing);
suite_add_tcase(s, red_black_extras);
suite_add_tcase(s, red_black_core);
return s;
}