#include #include #include #include "bintree.h" // comparator for unsigned int values stored by value in heap static int cmp_uint_ptr(const void *a, const void *b) { unsigned int va = *(const unsigned int *)a; unsigned int vb = *(const unsigned int *)b; if(va < vb) return -1; if(va > vb) return 1; return 0; } int main(void) { TreeNode *root = NULL; unsigned int vals[] = {5, 2, 8, 1, 3, 7, 9}; const size_t n = sizeof(vals)/sizeof(vals[0]); // insert values (copy made by addToTree) for(size_t i = 0; i < n; i++) { int isDup = 0; root = addToTree(root, &vals[i], sizeof(unsigned int), cmp_uint_ptr, &isDup); if(root == NULL && isDup == 0) { fprintf(stderr, "addToTree allocation failed\n"); return 1; } } unsigned int sz = treeSize(root); if(sz != n) { fprintf(stderr, "treeSize expected %zu got %u\n", n, sz); clearTree(root); return 2; } // inorder traversal using nextTreeData unsigned int last = 0; int first = 1; unsigned int *data = nextTreeData(root); while(data != NULL) { unsigned int v = *data; if(!first && v < last) { fprintf(stderr, "inorder traversal not sorted: %u after %u\n", v, last); clearTree(root); return 3; } last = v; first = 0; data = nextTreeData(NULL); } clearTree(root); printf("test_bintree: OK\n"); return 0; }