Archived
1
0
Fork 0
This repository has been archived on 2026-05-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
archived/test/t_rbtree.c
2010-10-19 03:31:16 +02:00

91 lines
1.6 KiB
C

#ifndef RB_DEBUG
#define RB_DEBUG 1
#endif
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include "../src/common/rbtree.h"
#define MAX_VAL 12500
#define NODES 5000
uint get_random_key(uint m) {
return (uint) (rand() % m);
}
void printer(rbnode *node) {
printf("node: %u (%p)\n", node->key, node);
}
int main(int argc, char **argv) {
uint keyref[NODES];
uint i, spos, search_key, ckey;
rbtree tree;
rbnode *snode;
tree.root = NULL;
srand(time(NULL));
/* rbtree should be empty */
assert(rbtree_is_empty(&tree) == 1);
/* get a random node position */
spos = get_random_key(NODES);
/* insert values */
for(i=0; i < NODES; i++) {
ckey = get_random_key(MAX_VAL);
if(i == spos)
search_key = ckey;
//printf("insert: %u\n", ckey);
rbtree_insert(&tree, ckey, NULL);
keyref[i] = ckey;
}
/* validate tree */
rb_assert(tree.root);
/* search the random key */
snode = rbtree_search(&tree, search_key);
assert(snode->key == search_key);
/* remove some values */
for(i=0; i < NODES; i++) {
//printf("removing: %u\n", ckey);
rbtree_delete(&tree, ckey);
ckey = get_random_key(MAX_VAL);
}
/* assert again */
rb_assert(tree.root);
if(argc == 1) {
/* free the tree */
rbtree_free(&tree, NULL);
} else {
printf("---\n");
for(i=0; i < NODES; i++) {
//printf("removing: %u\n", keyref[i]);
rbtree_delete(&tree, keyref[i]);
}
}
rbtree_walk(&tree, printer);
/* tree should now be empty */
assert(rbtree_is_empty(&tree) == 1);
return 0;
}