summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2013-06-07 22:08:33 +0200
committerRichard Braun <rbraun@sceen.net>2013-06-07 22:08:33 +0200
commit599cb4429d5c667599178714158f5d2090e34ad2 (patch)
tree4d6f06c62dc8fde066020fe99cbb045bddc4c782 /test
parent47c14590225144d524841f35dcebebbebe7bfc35 (diff)
test_rdxtree: new tests covering node creation failures
Diffstat (limited to 'test')
-rw-r--r--test/test_rdxtree.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/test/test_rdxtree.c b/test/test_rdxtree.c
index 3b9b09a..9d2a1d8 100644
--- a/test/test_rdxtree.c
+++ b/test/test_rdxtree.c
@@ -27,6 +27,8 @@
#include <assert.h>
#include <stdarg.h>
+#define RDXTREE_ENABLE_NODE_CREATION_FAILURES
+
#include "../error.h"
#include "../macros.h"
#include "../rdxtree.c"
@@ -848,6 +850,97 @@ test_32(void)
destroy_tree(&tree);
}
+extern unsigned int rdxtree_fail_node_creation_threshold;
+extern unsigned int rdxtree_nr_node_creations;
+
+static void
+test_33(void)
+{
+ struct rdxtree tree;
+ struct obj *obj;
+ int error;
+
+ TITLE("prepare node creation failure at 1, insert 1");
+
+ rdxtree_fail_node_creation_threshold = 1;
+ rdxtree_nr_node_creations = 0;
+
+ rdxtree_init(&tree);
+ obj = obj_create(1);
+ error = rdxtree_insert(&tree, obj->id, obj);
+ assert(error == ERR_NOMEM);
+ obj_destroy(obj);
+ print_tree(&tree);
+}
+
+static void
+test_34(void)
+{
+ struct rdxtree tree;
+ struct obj *obj;
+ int error;
+
+ TITLE("prepare node creation failure at 2, insert 64");
+
+ rdxtree_fail_node_creation_threshold = 2;
+ rdxtree_nr_node_creations = 0;
+
+ rdxtree_init(&tree);
+ obj = obj_create(64);
+ error = rdxtree_insert(&tree, obj->id, obj);
+ assert(error == ERR_NOMEM);
+ obj_destroy(obj);
+ print_tree(&tree);
+}
+
+static void
+test_35(void)
+{
+ struct rdxtree tree;
+ struct obj *obj;
+ int error;
+
+ TITLE("prepare node creation failure at 2, insert 0 and 64");
+
+ rdxtree_fail_node_creation_threshold = 2;
+ rdxtree_nr_node_creations = 0;
+
+ rdxtree_init(&tree);
+ obj = obj_create(0);
+ error = rdxtree_insert(&tree, obj->id, obj);
+ assert(!error);
+ obj = obj_create(64);
+ error = rdxtree_insert(&tree, obj->id, obj);
+ assert(error == ERR_NOMEM);
+ obj_destroy(obj);
+ print_tree(&tree);
+ destroy_tree(&tree);
+}
+
+static void
+test_36(void)
+{
+ struct rdxtree tree;
+ struct obj *obj;
+ int error;
+
+ TITLE("prepare node creation failure at 2, insert 1 and 64");
+
+ rdxtree_fail_node_creation_threshold = 2;
+ rdxtree_nr_node_creations = 0;
+
+ rdxtree_init(&tree);
+ obj = obj_create(1);
+ error = rdxtree_insert(&tree, obj->id, obj);
+ assert(!error);
+ obj = obj_create(64);
+ error = rdxtree_insert(&tree, obj->id, obj);
+ assert(error == ERR_NOMEM);
+ obj_destroy(obj);
+ print_tree(&tree);
+ destroy_tree(&tree);
+}
+
int
main(int argc, char *argv[])
{
@@ -886,5 +979,9 @@ main(int argc, char *argv[])
test_30();
test_31();
test_32();
+ test_33();
+ test_34();
+ test_35();
+ test_36();
return 0;
}