tests FEATURE include tests into build system
basic tests of ly_set implementation
diff --git a/tests/src/set.c b/tests/src/set.c
new file mode 100644
index 0000000..28b6f59
--- /dev/null
+++ b/tests/src/set.c
@@ -0,0 +1,147 @@
+/*
+ * @file set.c
+ * @author: Radek Krejci <rkrejci@cesnet.cz>
+ * @brief unit tests for functions from set.c
+ *
+ * Copyright (c) 2018 CESNET, z.s.p.o.
+ *
+ * This source code is licensed under BSD 3-Clause License (the "License").
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ */
+
+#define _BSD_SOURCE
+#define _DEFAULT_SOURCE
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <string.h>
+
+#include "libyang.h"
+#include "../../src/set.c"
+
+#define BUFSIZE 1024
+char logbuf[BUFSIZE] = {0};
+
+static void
+logger(LY_LOG_LEVEL level, const char *msg, const char *path)
+{
+ (void) level; /* unused */
+ (void) path; /* unused */
+
+ strncpy(logbuf, msg, BUFSIZE - 1);
+}
+
+static int
+logger_setup(void **state)
+{
+ (void) state; /* unused */
+
+ ly_set_log_clb(logger, 0);
+
+ return 0;
+}
+
+static void
+test_basics(void **state)
+{
+ (void) state; /* unused */
+
+ struct ly_set *set;
+ char *str;
+ unsigned int u;
+ void *ptr;
+
+ /* creation - everything is empty */
+ set = ly_set_new();
+ assert_non_null(set);
+ assert_int_equal(0, set->count);
+ assert_int_equal(0, set->size);
+ assert_null(set->objs);
+
+ /* add a testing object */
+ str = strdup("test string");
+ assert_non_null(str);
+
+ ly_set_add(set, str, 0);
+ assert_int_not_equal(0, set->size);
+ assert_int_equal(1, set->count);
+ assert_non_null(set->objs);
+ assert_non_null(set->objs[0]);
+
+ /* check the presence of the testing data */
+ assert_int_equal(0, ly_set_contains(set, str));
+ assert_int_equal(-1, ly_set_contains(set, str - 1));
+
+ /* remove data, but keep the set */
+ u = set->size;
+ ptr = set->objs;
+ ly_set_clean(set, free);
+ assert_int_equal(0, set->count);
+ assert_int_equal(u, set->size);
+ assert_ptr_equal(ptr, set->objs);
+
+ /* remove buffer, but keep the set object */
+ ly_set_erase(set, NULL);
+ assert_int_equal(0, set->count);
+ assert_int_equal(0, set->size);
+ assert_ptr_equal(NULL, set->objs);
+
+ /* final cleanup */
+ ly_set_free(set, NULL);
+}
+
+static void
+test_inval(void **state)
+{
+ struct ly_set set;
+ memset(&set, 0, sizeof set);
+
+ ly_set_clean(NULL, NULL);
+ assert_string_equal(logbuf, "Invalid argument set (ly_set_clean()).");
+
+ ly_set_erase(NULL, NULL);
+ assert_string_equal(logbuf, "Invalid argument set (ly_set_erase()).");
+
+ ly_set_free(NULL, NULL);
+ assert_string_equal(logbuf, "Invalid argument set (ly_set_free()).");
+
+ assert_null(ly_set_dup(NULL));
+ assert_string_equal(logbuf, "Invalid argument set (ly_set_dup()).");
+
+ assert_int_equal(-1, ly_set_add(NULL, NULL, 0));
+ assert_string_equal(logbuf, "Invalid argument set (ly_set_add()).");
+ assert_int_equal(-1, ly_set_add(&set, NULL, 0));
+ assert_string_equal(logbuf, "Invalid argument object (ly_set_add()).");
+
+ assert_int_equal(-1, ly_set_merge(NULL, NULL, 0));
+ assert_string_equal(logbuf, "Invalid argument trg (ly_set_merge()).");
+ assert_int_equal(0, ly_set_merge(&set, NULL, 0));
+ assert_string_equal(logbuf, "Invalid argument src (ly_set_merge()).");
+
+ assert_int_equal(LY_EINVAL, ly_set_rm_index(NULL, 0));
+ assert_string_equal(logbuf, "Invalid argument set (ly_set_rm_index()).");
+ assert_int_equal(LY_EINVAL, ly_set_rm_index(&set, 1));
+ assert_string_equal(logbuf, "Invalid argument index (ly_set_rm_index()).");
+
+ assert_int_equal(LY_EINVAL, ly_set_rm(NULL, NULL));
+ assert_string_equal(logbuf, "Invalid argument set (ly_set_rm()).");
+ assert_int_equal(LY_EINVAL, ly_set_rm(&set, NULL));
+ assert_string_equal(logbuf, "Invalid argument object (ly_set_rm()).");
+ assert_int_equal(LY_EINVAL, ly_set_rm(&set, &state));
+ assert_string_equal(logbuf, "Invalid argument object (ly_set_rm()).");
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(test_basics),
+ cmocka_unit_test_setup(test_inval, logger_setup),
+ };
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}