static int test_bst_t_first (struct bst_table *tree, int n) { struct bst_traverser trav; int *first; first = bst_t_first (&trav, tree); if (first == NULL || *first != 0) { printf (" First item test failed: expected 0, got %d\n", first != NULL ? *first : -1); return 0; } return 1; } static int test_bst_t_last (struct bst_table *tree, int n) { struct bst_traverser trav; int *last; last = bst_t_last (&trav, tree); if (last == NULL || *last != n - 1) { printf (" Last item test failed: expected %d, got %d\n", n - 1, last != NULL ? *last : -1); return 0; } return 1; } static int test_bst_t_find (struct bst_table *tree, int n) { int i; for (i = 0; i < n; i++) { struct bst_traverser trav; int *iter; iter = bst_t_find (&trav, tree, &i); if (iter == NULL || *iter != i) { printf (" Find item test failed: looked for %d, got %d\n", i, iter != NULL ? *iter : -1); return 0; } } return 1; } static int test_bst_t_insert (struct bst_table *tree, int n) { int i; for (i = 0; i < n; i++) { struct bst_traverser trav; int *iter; iter = bst_t_insert (&trav, tree, &i); if (iter == NULL || iter == &i || *iter != i) { printf (" Insert item test failed: inserted dup %d, got %d\n", i, iter != NULL ? *iter : -1); return 0; } } return 1; } static int test_bst_t_next (struct bst_table *tree, int n) { struct bst_traverser trav; int i; bst_t_init (&trav, tree); for (i = 0; i < n; i++) { int *iter = bst_t_next (&trav); if (iter == NULL || *iter != i) { printf (" Next item test failed: expected %d, got %d\n", i, iter != NULL ? *iter : -1); return 0; } } return 1; } static int test_bst_t_prev (struct bst_table *tree, int n) { struct bst_traverser trav; int i; bst_t_init (&trav, tree); for (i = n - 1; i >= 0; i--) { int *iter = bst_t_prev (&trav); if (iter == NULL || *iter != i) { printf (" Previous item test failed: expected %d, got %d\n", i, iter != NULL ? *iter : -1); return 0; } } return 1; } static int test_bst_copy (struct bst_table *tree, int n) { struct bst_table *copy = bst_copy (tree, NULL, NULL, NULL); int okay = compare_trees (tree->bst_root, copy->bst_root); bst_destroy (copy, NULL); return okay; }