aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Kahn <jkahn@barracuda.com>2015-09-21 17:14:55 -0400
committerJason Evans <je@fb.com>2015-11-09 15:56:24 -0800
commit710ca112e31e8621177d08162f60158c27dd2974 (patch)
tree5ab1d03e15abe401d42025bc6cce819d2b1b1a0f
parente8ab0ab9c0e395d3c09398fa981704a9be968838 (diff)
downloadjemalloc-710ca112e31e8621177d08162f60158c27dd2974.tar.gz
Add test for tree destruction
-rw-r--r--test/unit/rb.c17
1 files changed, 16 insertions, 1 deletions
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 @@ remove_reverse_iterate_cb(tree_t *tree, node_t *node, void *data)
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 @@ TEST_BEGIN(test_rb_random)
}
/* 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 @@ TEST_BEGIN(test_rb_random)
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();
}