X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fdaemon%2Futils_avltree_test.c;h=bb30f9d6fe23a36e829bf07d00eceb9fce042f8c;hp=2a8244c9f3e6cd1008649091de98b595ebf386f6;hb=da11ce02eb202b3e01d3e2d1b40f248a84430973;hpb=f7b05ebf3311b4c6cb5289f1f7cd8ee02918ef92 diff --git a/src/daemon/utils_avltree_test.c b/src/daemon/utils_avltree_test.c index 2a8244c9..bb30f9d6 100644 --- a/src/daemon/utils_avltree_test.c +++ b/src/daemon/utils_avltree_test.c @@ -24,59 +24,114 @@ * Florian octo Forster */ -#include "testing.h" +#include "common.h" /* STATIC_ARRAY_SIZE */ #include "collectd.h" + +#include "testing.h" #include "utils_avltree.h" static int compare_total_count = 0; -#define RESET_COUNTS() do { compare_total_count = 0; } while (0) +#define RESET_COUNTS() \ + do { \ + compare_total_count = 0; \ + } while (0) -static int compare_callback (void const *v0, void const *v1) -{ - assert (v0 != NULL); - assert (v1 != NULL); +static int compare_callback(void const *v0, void const *v1) { + assert(v0 != NULL); + assert(v1 != NULL); compare_total_count++; - return (strcmp (v0, v1)); + return strcmp(v0, v1); } -DEF_TEST(success) -{ +DEF_TEST(success) { + struct { + char *key; + char *value; + } cases[] = { + {"Eeph7chu", "vai1reiV"}, {"igh3Paiz", "teegh1Ee"}, + {"caip6Uu8", "ooteQu8n"}, {"Aech6vah", "AijeeT0l"}, + {"Xah0et2L", "gah8Taep"}, {"BocaeB8n", "oGaig8io"}, + {"thai8AhM", "ohjeFo3f"}, {"ohth6ieC", "hoo8ieWo"}, + {"aej7Woow", "phahuC2s"}, {"Hai8ier2", "Yie6eimi"}, + {"phuXi3Li", "JaiF7ieb"}, {"Shaig5ef", "aihi5Zai"}, + {"voh6Aith", "Oozaeto0"}, {"zaiP5kie", "seep5veM"}, + {"pae7ba7D", "chie8Ojo"}, {"Gou2ril3", "ouVoo0ha"}, + {"lo3Thee3", "ahDu4Zuj"}, {"Rah8kohv", "ieShoc7E"}, + {"ieN5engi", "Aevou1ah"}, {"ooTe4OhP", "aingai5Y"}, + }; + c_avl_tree_t *t; - char key_orig[] = "foo"; - char value_orig[] = "bar"; - char *key_ret = NULL; - char *value_ret = NULL; - RESET_COUNTS (); - t = c_avl_create (compare_callback); - OK (t != NULL); + RESET_COUNTS(); + CHECK_NOT_NULL(t = c_avl_create(compare_callback)); + + /* insert */ + for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) { + char *key; + char *value; - OK (c_avl_insert (t, key_orig, value_orig) == 0); - OK (c_avl_size (t) == 1); + CHECK_NOT_NULL(key = strdup(cases[i].key)); + CHECK_NOT_NULL(value = strdup(cases[i].value)); + + CHECK_ZERO(c_avl_insert(t, key, value)); + EXPECT_EQ_INT((int)(i + 1), c_avl_size(t)); + } /* Key already exists. */ - OK (c_avl_insert (t, "foo", "qux") > 0); + for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) + EXPECT_EQ_INT(1, c_avl_insert(t, cases[i].key, cases[i].value)); + + /* get */ + for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) { + char *value_ret = NULL; + + CHECK_ZERO(c_avl_get(t, cases[i].key, (void *)&value_ret)); + EXPECT_EQ_STR(cases[i].value, value_ret); + } + + /* remove half */ + for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases) / 2; i++) { + char *key = NULL; + char *value = NULL; - OK (c_avl_get (t, "foo", (void *) &value_ret) == 0); - OK (value_ret == &value_orig[0]); + int expected_size = (int)(STATIC_ARRAY_SIZE(cases) - (i + 1)); - key_ret = value_ret = NULL; - OK (c_avl_remove (t, "foo", (void *) &key_ret, (void *) &value_ret) == 0); - OK (key_ret == &key_orig[0]); - OK (value_ret == &value_orig[0]); - OK (c_avl_size (t) == 0); + CHECK_ZERO(c_avl_remove(t, cases[i].key, (void *)&key, (void *)&value)); - c_avl_destroy (t); + EXPECT_EQ_STR(cases[i].key, key); + EXPECT_EQ_STR(cases[i].value, value); - return (0); + free(key); + free(value); + + EXPECT_EQ_INT(expected_size, c_avl_size(t)); + } + + /* pick the other half */ + for (size_t i = STATIC_ARRAY_SIZE(cases) / 2; i < STATIC_ARRAY_SIZE(cases); + i++) { + char *key = NULL; + char *value = NULL; + + int expected_size = (int)(STATIC_ARRAY_SIZE(cases) - (i + 1)); + + EXPECT_EQ_INT(expected_size + 1, c_avl_size(t)); + EXPECT_EQ_INT(0, c_avl_pick(t, (void *)&key, (void *)&value)); + + free(key); + free(value); + + EXPECT_EQ_INT(expected_size, c_avl_size(t)); + } + + c_avl_destroy(t); + + return 0; } -int main (void) -{ +int main(void) { RUN_TEST(success); END_TEST; } - -/* vim: set sw=2 sts=2 et : */