X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdaemon%2Futils_avltree_test.c;h=4be49416d7ef0d3f273c6e475c3fe5d8e8b97e10;hb=84502d3824a9a2e5585fc7f000c1b2e23953d212;hp=bb30f9d6fe23a36e829bf07d00eceb9fce042f8c;hpb=267bbc64779f9c7b32e063aac0df22be61bda6ae;p=collectd.git diff --git a/src/daemon/utils_avltree_test.c b/src/daemon/utils_avltree_test.c index bb30f9d6..4be49416 100644 --- a/src/daemon/utils_avltree_test.c +++ b/src/daemon/utils_avltree_test.c @@ -24,13 +24,14 @@ * Florian octo Forster */ -#include "common.h" /* STATIC_ARRAY_SIZE */ #include "collectd.h" +#include "common.h" /* STATIC_ARRAY_SIZE */ #include "testing.h" #include "utils_avltree.h" -static int compare_total_count = 0; +static int compare_total_count; + #define RESET_COUNTS() \ do { \ compare_total_count = 0; \ @@ -44,11 +45,17 @@ static int compare_callback(void const *v0, void const *v1) { return strcmp(v0, v1); } +struct kv_t { + char *key; + char *value; +}; + +static int kv_compare(const void *a_ptr, const void *b_ptr) { + return strcmp(((struct kv_t *)a_ptr)->key, ((struct kv_t *)b_ptr)->key); +} + DEF_TEST(success) { - struct { - char *key; - char *value; - } cases[] = { + struct kv_t cases[] = { {"Eeph7chu", "vai1reiV"}, {"igh3Paiz", "teegh1Ee"}, {"caip6Uu8", "ooteQu8n"}, {"Aech6vah", "AijeeT0l"}, {"Xah0et2L", "gah8Taep"}, {"BocaeB8n", "oGaig8io"}, @@ -61,6 +68,11 @@ DEF_TEST(success) { {"ieN5engi", "Aevou1ah"}, {"ooTe4OhP", "aingai5Y"}, }; + struct kv_t sorted_cases[STATIC_ARRAY_SIZE(cases)]; + memcpy(sorted_cases, cases, sizeof(cases)); + qsort(sorted_cases, STATIC_ARRAY_SIZE(cases), sizeof(struct kv_t), + kv_compare); + c_avl_tree_t *t; RESET_COUNTS(); @@ -90,6 +102,37 @@ DEF_TEST(success) { EXPECT_EQ_STR(cases[i].value, value_ret); } + /* iterate forward */ + { + c_avl_iterator_t *iter = c_avl_get_iterator(t); + char *key; + char *value; + size_t i = 0; + while (c_avl_iterator_next(iter, (void **)&key, (void **)&value) == 0) { + EXPECT_EQ_STR(sorted_cases[i].key, key); + EXPECT_EQ_STR(sorted_cases[i].value, value); + i++; + } + c_avl_iterator_destroy(iter); + EXPECT_EQ_INT(i, STATIC_ARRAY_SIZE(cases)); + } + + /* iterate backward */ + { + c_avl_iterator_t *iter = c_avl_get_iterator(t); + char *key; + char *value; + size_t i = 0; + while (c_avl_iterator_prev(iter, (void **)&key, (void **)&value) == 0) { + EXPECT_EQ_STR(sorted_cases[STATIC_ARRAY_SIZE(cases) - 1 - i].key, key); + EXPECT_EQ_STR(sorted_cases[STATIC_ARRAY_SIZE(cases) - 1 - i].value, + value); + i++; + } + c_avl_iterator_destroy(iter); + EXPECT_EQ_INT(i, STATIC_ARRAY_SIZE(cases)); + } + /* remove half */ for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases) / 2; i++) { char *key = NULL;