Add test for tree destruction
diff --git a/test/unit/rb.c b/test/unit/rb.c
index 0262037..14132c1 100644
--- a/test/unit/rb.c
+++ b/test/unit/rb.c
@@ -212,6 +212,15 @@
return (ret);
}
+static void
+destroy_cb(node_t *node, void *data)
+{
+ unsigned *nnodes = (unsigned *)data;
+
+ assert_u_gt(*nnodes, 0, "Destruction removed too many nodes");
+ (*nnodes)--;
+}
+
TEST_BEGIN(test_rb_random)
{
#define NNODES 25
@@ -278,7 +287,7 @@
}
/* Remove nodes. */
- switch (i % 4) {
+ switch (i % 5) {
case 0:
for (k = 0; k < j; k++)
node_remove(&tree, &nodes[k], j - k);
@@ -314,6 +323,12 @@
assert_u_eq(nnodes, 0,
"Removal terminated early");
break;
+ } case 4: {
+ unsigned nnodes = j;
+ tree_destroy(&tree, destroy_cb, &nnodes);
+ assert_u_eq(nnodes, 0,
+ "Destruction terminated early");
+ break;
} default:
not_reached();
}