Files
C-Macro-Collections/tests/main/unt/treeset.c
T
Leonardo 656c0e3b3a Added cmc_assert_total, cmc_assert_failed, better-looking unit test and other things
Started using functions from futils.h in unit test
Renamed unit tests
2020-04-17 16:29:52 -03:00

168 lines
5.1 KiB
C

#include "utl.c"
#include "utl/assert.h"
#include "utl/log.h"
#include "utl/test.h"
#include "../src/treeset.c"
struct treeset_fval *ts_fval = &(struct treeset_fval){ .cmp = cmc_size_cmp,
.cpy = NULL,
.str = cmc_size_str,
.free = NULL,
.hash = cmc_size_hash,
.pri = cmc_size_cmp };
CMC_CREATE_UNIT(TreeSet, true, {
CMC_CREATE_TEST(new, {
struct treeset *set = ts_new(ts_fval);
cmc_assert_not_equals(ptr, NULL, set);
ts_free(set);
});
CMC_CREATE_TEST(clear[count], {
struct treeset *set = ts_new(ts_fval);
cmc_assert_not_equals(ptr, NULL, set);
for (size_t i = 0; i < 50; i++)
ts_insert(set, i);
cmc_assert_equals(size_t, 50, ts_count(set));
ts_clear(set);
cmc_assert_equals(size_t, 0, ts_count(set));
cmc_assert_equals(ptr, NULL, set->root);
ts_free(set);
});
CMC_CREATE_TEST(flags, {
struct treeset *set = ts_new(ts_fval);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
// clear
set->flag = cmc_flags.ERROR;
ts_clear(set);
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
// insert
set->flag = cmc_flags.ERROR;
cmc_assert(ts_insert(set, 1));
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
cmc_assert(!ts_insert(set, 1));
cmc_assert_equals(int32_t, cmc_flags.DUPLICATE, ts_flag(set));
// remove
cmc_assert(!ts_remove(set, 2));
cmc_assert_equals(int32_t, cmc_flags.NOT_FOUND, ts_flag(set));
cmc_assert(ts_remove(set, 1));
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
cmc_assert(!ts_remove(set, 1));
cmc_assert_equals(int32_t, cmc_flags.EMPTY, ts_flag(set));
// max min
set->flag = cmc_flags.ERROR;
cmc_assert(!ts_max(set, NULL));
cmc_assert_equals(int32_t, cmc_flags.EMPTY, ts_flag(set));
set->flag = cmc_flags.ERROR;
cmc_assert(!ts_min(set, NULL));
cmc_assert_equals(int32_t, cmc_flags.EMPTY, ts_flag(set));
cmc_assert(ts_insert(set, 1));
set->flag = cmc_flags.ERROR;
cmc_assert(ts_max(set, NULL));
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
set->flag = cmc_flags.ERROR;
cmc_assert(ts_min(set, NULL));
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
// copy_of
set->flag = cmc_flags.ERROR;
struct treeset *set2 = ts_copy_of(set);
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set2));
// equals
set->flag = cmc_flags.ERROR;
set2->flag = cmc_flags.ERROR;
cmc_assert(ts_equals(set, set2));
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set));
cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set2));
ts_free(set);
ts_free(set2);
});
CMC_CREATE_TEST(callbacks, {
struct treeset *set = ts_new_custom(ts_fval, NULL, callbacks);
cmc_assert_not_equals(ptr, NULL, set);
total_create = 0;
total_read = 0;
total_update = 0;
total_delete = 0;
total_resize = 0;
cmc_assert(ts_insert(set, 10));
cmc_assert_equals(int32_t, 1, total_create);
cmc_assert(ts_remove(set, 10));
cmc_assert_equals(int32_t, 1, total_delete);
cmc_assert(ts_insert(set, 1));
cmc_assert_equals(int32_t, 2, total_create);
cmc_assert(ts_max(set, NULL));
cmc_assert_equals(int32_t, 1, total_read);
cmc_assert(ts_min(set, NULL));
cmc_assert_equals(int32_t, 2, total_read);
cmc_assert(ts_contains(set, 1));
cmc_assert_equals(int32_t, 3, total_read);
cmc_assert_equals(int32_t, 2, total_create);
cmc_assert_equals(int32_t, 3, total_read);
cmc_assert_equals(int32_t, 0, total_update);
cmc_assert_equals(int32_t, 1, total_delete);
cmc_assert_equals(int32_t, 0, total_resize);
ts_customize(set, NULL, NULL);
ts_clear(set);
cmc_assert(ts_insert(set, 10));
cmc_assert(ts_remove(set, 10));
cmc_assert(ts_insert(set, 1));
cmc_assert(ts_max(set, NULL));
cmc_assert(ts_min(set, NULL));
cmc_assert(ts_contains(set, 1));
cmc_assert_equals(int32_t, 2, total_create);
cmc_assert_equals(int32_t, 3, total_read);
cmc_assert_equals(int32_t, 0, total_update);
cmc_assert_equals(int32_t, 1, total_delete);
cmc_assert_equals(int32_t, 0, total_resize);
cmc_assert_equals(ptr, NULL, set->callbacks);
total_create = 0;
total_read = 0;
total_update = 0;
total_delete = 0;
total_resize = 0;
ts_free(set);
});
});