diff --git a/src/utl/futils.h b/src/utl/futils.h index 103061e..e9516b1 100644 --- a/src/utl/futils.h +++ b/src/utl/futils.h @@ -114,7 +114,14 @@ static inline int cmc_str_cmp(char *ch1, char *ch2) static inline char *cmc_str_cpy(char *str) { - return strdup(str); + size_t len = strlen(str) + 1; + + char *result = malloc(len); + + if (!result) + return NULL; + + return memcpy(result, str, len); } /** diff --git a/src/utl/test.h b/src/utl/test.h index 0d15fdf..4e51d24 100644 --- a/src/utl/test.h +++ b/src/utl/test.h @@ -95,7 +95,7 @@ static void cmc_test_log(const char *unit_name, const char *current_test, size_t str_len = strlen(current_test); if (str_len < 53) { - printf(cmc_test_color(3)); + printf("%s", cmc_test_color(3)); for (size_t i = 0; i < 53 - str_len; i++) putchar('.'); } @@ -118,22 +118,22 @@ static void cmc_test_log(const char *unit_name, const char *current_test, tinfo.assert_total = cmc_assert_total; \ tinfo.assert_failed = cmc_assert_failed; \ \ - /* Tests */ \ - cmc_timer_start(timer); \ - \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf( \ " +---------------------------------------------------------------+\n"); \ printf(" | "); \ - printf(cmc_test_color(0)); \ + printf("%s", cmc_test_color(0)); \ printf("Unit "); \ - printf(cmc_test_color(4)); \ + printf("%s", cmc_test_color(4)); \ printf("%-56s", unit_name); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf( \ " |\n +---------------------------------------------------------------+"); \ printf("%s\n", cmc_test_color(0)); \ \ + /* Tests */ \ + cmc_timer_start(timer); \ + \ BODY; \ \ cmc_timer_stop(timer); \ @@ -147,57 +147,57 @@ static void cmc_test_log(const char *unit_name, const char *current_test, tinfo.assert_total = cmc_assert_total - tinfo.assert_total; \ tinfo.assert_failed = cmc_assert_failed - tinfo.assert_failed; \ \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf( \ " +---------------------------------------------------------------+\n | "); \ - printf(cmc_test_color(0)); \ + printf("%s", cmc_test_color(0)); \ printf("Summary : "); \ - printf(cmc_test_color(4)); \ + printf("%s", cmc_test_color(4)); \ printf("%-52s", unit_name); \ printf("%s|\n", cmc_test_color(3)); \ printf( \ " +---------++----------------+-----------------+-----------------+\n | "); \ - printf(cmc_test_color(0)); \ + printf("%s", cmc_test_color(0)); \ printf("Tests "); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf("||"); \ - printf(cmc_test_color(5)); \ + printf("%s", cmc_test_color(5)); \ printf(" Total %8" PRIuMAX "", tinfo.total); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf(" | "); \ - printf(cmc_test_color(2)); \ + printf("%s", cmc_test_color(2)); \ printf("Passed %8" PRIuMAX "", tinfo.passed); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf(" | "); \ - printf(cmc_test_color(1)); \ + printf("%s", cmc_test_color(1)); \ printf("Failed %8" PRIuMAX "", tinfo.failed); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf(" |\n | "); \ - printf(cmc_test_color(0)); \ + printf("%s", cmc_test_color(0)); \ printf("Asserts "); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf("||"); \ - printf(cmc_test_color(5)); \ + printf("%s", cmc_test_color(5)); \ printf(" Total %8" PRIuMAX "", tinfo.assert_total); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf(" | "); \ - printf(cmc_test_color(2)); \ + printf("%s", cmc_test_color(2)); \ printf("Passed %8" PRIuMAX "", \ tinfo.assert_total - tinfo.assert_failed); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf(" | "); \ - printf(cmc_test_color(1)); \ + printf("%s", cmc_test_color(1)); \ printf("Failed %8" PRIuMAX "", tinfo.assert_failed); \ - printf(cmc_test_color(3)); \ + printf("%s", cmc_test_color(3)); \ printf(" |\n"); \ printf( \ " +---------++----------------+-----------------+-----------------+\n | "); \ - printf(cmc_test_color(0)); \ + printf("%s", cmc_test_color(0)); \ printf("Total Runtime : %32.0f milliseconds", timer.result); \ printf(" %s|\n", cmc_test_color(3)); \ printf( \ " +---------------------------------------------------------------+\n"); \ - printf(cmc_test_color(0)); \ + printf("%s", cmc_test_color(0)); \ printf("\n\n"); \ \ return tinfo.failed; \ diff --git a/tests/main/unt/deque.c b/tests/main/unt/deque.c index 68a6d94..e54f209 100644 --- a/tests/main/unt/deque.c +++ b/tests/main/unt/deque.c @@ -38,6 +38,10 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_equals(ptr, NULL, d); + d = d_new(1000, NULL); + + cmc_assert_equals(ptr, NULL, d); + d = d_new(UINT64_MAX, d_fval); cmc_assert_equals(ptr, NULL, d); @@ -59,9 +63,16 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_equals(ptr, NULL, d); + d = d_new_custom(1000, NULL, d_alloc_node, callbacks); + + cmc_assert_equals(ptr, NULL, d); + d = d_new_custom(UINT64_MAX, d_fval, d_alloc_node, callbacks); cmc_assert_equals(ptr, NULL, d); + + if (d) + d_free(d); }); CMC_CREATE_TEST(PFX##_clear(), { @@ -76,9 +87,11 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_equals(size_t, 50, d_count(d)); + d->flag = cmc_flags.ERROR; d_clear(d); cmc_assert_equals(size_t, 50, v_total_free); + cmc_assert_equals(int32_t, cmc_flags.OK, d->flag); cmc_assert_equals(size_t, 0, d_count(d)); cmc_assert_equals(size_t, 100, d_capacity(d)); @@ -100,6 +113,18 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_equals(size_t, 500500, sum); + d->flag = cmc_flags.ERROR; + d_clear(d); + + cmc_assert_equals(size_t, 1050, v_total_free); + cmc_assert_equals(int32_t, cmc_flags.OK, d->flag); + + sum = 0; + for (size_t i = 0; i < d->capacity; i++) + sum += d->buffer[i]; + + cmc_assert_equals(size_t, 0, sum); + d_free(d); cmc_assert_equals(size_t, 1050, v_total_free); @@ -141,26 +166,40 @@ CMC_CREATE_UNIT(Deque, true, { CMC_CREATE_TEST(PFX##_customize(), { struct deque *d = d_new(100, d_fval); + d->flag = cmc_flags.ERROR; d_customize(d, d_alloc_node, callbacks); cmc_assert_equals(ptr, d_alloc_node, d->alloc); cmc_assert_equals(ptr, callbacks, d->callbacks); + cmc_assert_equals(int32_t, cmc_flags.OK, d->flag); + d->flag = cmc_flags.ERROR; d_customize(d, NULL, NULL); cmc_assert_equals(ptr, &cmc_alloc_node_default, d->alloc); cmc_assert_equals(ptr, NULL, d->callbacks); + cmc_assert_equals(int32_t, cmc_flags.OK, d->flag); d_free(d); }); CMC_CREATE_TEST(PFX##_push_front(), { - struct deque *d = d_new(100, d_fval); + total_create = 0; + struct deque *d = d_new_custom(100, d_fval, NULL, callbacks); cmc_assert_not_equals(ptr, NULL, d); + cmc_assert(d_push_front(d, 10)); + cmc_assert_equals(size_t, 1, d_count(d)); + + cmc_assert_equals(int32_t, 1, total_create); + + d_customize(d, NULL, NULL); + + d_clear(d); + for (size_t i = 0; i < 150; i++) - cmc_assert(d_push_front(d, i)); + d_push_front(d, i); cmc_assert_equals(size_t, 150, d_count(d)); cmc_assert_greater(size_t, 100, d_capacity(d)); @@ -172,7 +211,7 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_not_equals(ptr, NULL, d); for (size_t i = 1; i <= 1000; i++) - cmc_assert(d_push_front(d, i)); + d_push_front(d, i); size_t sum = 0; @@ -185,15 +224,28 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_equals(size_t, 500500, sum); d_free(d); + + cmc_assert_equals(int32_t, 1, total_create); + total_create = 0; }); CMC_CREATE_TEST(PFX##_push_back(), { - struct deque *d = d_new(100, d_fval); + total_create = 0; + struct deque *d = d_new_custom(100, d_fval, NULL, callbacks); cmc_assert_not_equals(ptr, NULL, d); + cmc_assert(d_push_front(d, 10)); + cmc_assert_equals(size_t, 1, d_count(d)); + + cmc_assert_equals(int32_t, 1, total_create); + + d_customize(d, NULL, NULL); + + d_clear(d); + for (size_t i = 0; i < 150; i++) - cmc_assert(d_push_back(d, i)); + d_push_back(d, i); cmc_assert_equals(size_t, 150, d_count(d)); cmc_assert_greater(size_t, 100, d_capacity(d)); @@ -205,7 +257,7 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_not_equals(ptr, NULL, d); for (size_t i = 1; i <= 1000; i++) - cmc_assert(d_push_back(d, i)); + d_push_back(d, i); size_t sum = 0; @@ -218,6 +270,9 @@ CMC_CREATE_UNIT(Deque, true, { cmc_assert_equals(size_t, 500500, sum); d_free(d); + + cmc_assert_equals(int32_t, 1, total_create); + total_create = 0; }); CMC_CREATE_TEST(PFX##_pop_front(), {