* Florian octo Forster <octo at collectd.org>
*/
-#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 : */