summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tree.c4
-rw-r--r--tests/tree.c27
-rw-r--r--tests/vector.c1
3 files changed, 29 insertions, 3 deletions
diff --git a/src/tree.c b/src/tree.c
index 5edda76..fccf209 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -16,9 +16,9 @@
struct Tree {
const void *const value;
+ const size_t value_size;
const struct Tree *left;
const struct Tree *right;
- const size_t value_size;
size_t height;
};
@@ -38,9 +38,9 @@ tree_new(const size_t value_size, const struct Tree **const out) {
memcpy((void *)ret, &(struct Tree) {
.value = NULL,
+ .value_size = value_size,
.left = NULL,
.right = NULL,
- .value_size = value_size,
.height = 0U,
}, sizeof(*ret));
*out = ret;
diff --git a/tests/tree.c b/tests/tree.c
index b848f48..e2b2e0c 100644
--- a/tests/tree.c
+++ b/tests/tree.c
@@ -3,6 +3,7 @@
#include "../src/testing.h"
+
static int
test_tree_new(void) {
int rc = -1;
@@ -28,6 +29,9 @@ test_tree_new(void) {
rc = 0;
out:
+ if (t != NULL) {
+ tree_free(&t);
+ }
return rc;
}
@@ -39,7 +43,7 @@ test_tree_free(void) {
test_start("tree_free()");
{
- testing("simple free");
+ testing("*t becomes NULL again after tree_free(&t)");
assert(t == NULL);
@@ -50,6 +54,7 @@ test_tree_free(void) {
assert(t != NULL);
tree_free(&t);
+ assert(t == NULL);
test_ok();
}
@@ -62,6 +67,24 @@ out:
return rc;
}
+static void
+test_tree_contains(void) {
+
+ const int y0 = 7;
+ const int n0 = 1;
+
+ const struct Tree root = {
+ .value = &y0,
+ .value_size = sizeof(int),
+ .left = NULL,
+ .right = NULL,
+ .height = 3U,
+ };
+
+ assert(tree_contains(&root, &y0));
+
+ assert(!tree_contains(&root, &n0));
+}
int
main(void) {
@@ -77,6 +100,8 @@ main(void) {
goto out;
}
+ test_tree_contains();
+
rc = 0;
out:
return !!rc;
diff --git a/tests/vector.c b/tests/vector.c
index 72d796e..3a13cda 100644
--- a/tests/vector.c
+++ b/tests/vector.c
@@ -152,6 +152,7 @@ test_vector_free(void) {
assert(v != NULL);
vector_free(&v);
+ assert(v == NULL);
test_ok();
}