Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-avl.c')
-rw-r--r--tests/test-avl.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/test-avl.c b/tests/test-avl.c
new file mode 100644
index 0000000..18ee9b7
--- /dev/null
+++ b/tests/test-avl.c
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "avl.h"
+#include "avl-cmp.h"
+#include "utils.h"
+
+#define OUT(fmt, ...) do { \
+ fprintf(stdout, "%s: " fmt, __func__, ## __VA_ARGS__); \
+} while (0);
+
+struct node {
+ struct avl_node avl;
+};
+
+static void test_basics()
+{
+ size_t i;
+ struct avl_tree t;
+ struct node *temp;
+ struct node *elem;
+ struct node *last;
+ struct node *first;
+ const char *vals[] = {
+ "zero", "one", "two", "three", "four", "five", "six",
+ "seven", "eight", "nine", "ten", "eleven", "twelve"
+ };
+
+ avl_init(&t, avl_strcmp, false, NULL);
+
+ OUT("insert: ");
+ for (i=0; i<ARRAY_SIZE(vals); i++) {
+ struct node *n = malloc(sizeof(struct node));
+ n->avl.key = vals[i];
+
+ int r = avl_insert(&t, &n->avl);
+ fprintf(stdout, "%d=%s ", r, (char *)n->avl.key);
+ }
+ fprintf(stdout, "\n");
+
+ OUT("insert duplicate: ");
+ for (i=0; i<ARRAY_SIZE(vals); i++) {
+ struct node *n = malloc(sizeof(struct node));
+ n->avl.key = vals[i];
+
+ int r = avl_insert(&t, &n->avl);
+ fprintf(stdout, "%d=%s ", r, (char *)n->avl.key);
+
+ if (r)
+ free(n);
+ }
+ fprintf(stdout, "\n");
+
+ first = avl_first_element(&t, first, avl);
+ last = avl_last_element(&t, last, avl);
+ OUT("first=%s last=%s\n", (char*)first->avl.key, (char*)last->avl.key);
+
+ OUT("for each element: ");
+ avl_for_each_element(&t, elem, avl) {
+ fprintf(stdout, "%s ", (char*)elem->avl.key);
+ }
+ fprintf(stdout, "\n");
+
+ OUT("delete 'one' element\n");
+ elem = avl_find_element(&t, "one", elem, avl);
+ avl_delete(&t, &elem->avl);
+ free(elem);
+
+ OUT("for each element reverse: ");
+ avl_for_each_element_reverse(&t, elem, avl) {
+ fprintf(stdout, "%s ", (char*)elem->avl.key);
+ }
+ fprintf(stdout, "\n");
+
+ OUT("delete all elements\n");
+ avl_for_each_element_safe(&t, elem, avl, temp) {
+ avl_delete(&t, &elem->avl);
+ free(elem);
+ }
+}
+
+int main()
+{
+ test_basics();
+ return 0;
+}