FastSort/ext/klib/test/kavl-lite_test.c

61 lines
1.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "kavl-lite.h"
#define CALLOC(type, num) ((type*)calloc(num, sizeof(type)))
struct my_node {
int key;
KAVLL_HEAD(struct my_node) head;
};
#define my_cmp(p, q) (((p)->key > (q)->key) - ((p)->key < (q)->key))
KAVLL_INIT(my, struct my_node, head, my_cmp)
void shuffle(int n, char a[])
{
int i, j;
for (i = n; i > 1; --i) {
char tmp;
j = (int)(drand48() * i);
tmp = a[j]; a[j] = a[i-1]; a[i-1] = tmp;
}
}
int main(void)
{
char buf[256];
int i, n;
struct my_node *root = 0;
struct my_node *p, *q, t;
my_itr_t itr;
for (i = 33, n = 0; i <= 126; ++i)
if (i != '(' && i != ')' && i != '.' && i != ';')
buf[n++] = i;
shuffle(n, buf);
for (i = 0; i < n; ++i) {
p = CALLOC(struct my_node, 1);
p->key = buf[i];
q = my_insert(&root, p);
if (p != q) free(p);
}
shuffle(n, buf);
for (i = 0; i < n/2; ++i) {
t.key = buf[i];
q = my_erase(&root, &t);
if (q) free(q);
}
my_itr_first(root, &itr);
do {
const struct my_node *r = kavll_at(&itr);
putchar(r->key);
free((void*)r);
} while (my_itr_next(&itr));
putchar('\n');
return 0;
}