#include "util_allocator.h"
#include "cx/common.h"
#include "cx/test.h"
CxTestSuite *cx_test_suite_testing_allocator(
void);
CxTestSuite *cx_test_suite_szmul(
void);
CxTestSuite *cx_test_suite_allocator(
void);
CxTestSuite *cx_test_suite_streams(
void);
CxTestSuite *cx_test_suite_compare(
void);
CxTestSuite *cx_test_suite_string(
void);
CxTestSuite *cx_test_suite_string_to_number(
void);
CxTestSuite *cx_test_suite_buffer(
void);
CxTestSuite *cx_test_suite_hash_key(
void);
CxTestSuite *cx_test_suite_hash_map(
void);
CxTestSuite *cx_test_suite_iterator(
void);
CxTestSuite *cx_test_suite_empty_list(
void);
CxTestSuite *cx_test_suite_array_list(
void);
CxTestSuite *cx_test_suite_array_list_defaulted_funcs(
void);
CxTestSuite *cx_test_suite_linked_list(
void);
CxTestSuite *cx_test_suite_linked_list_defaulted_funcs(
void);
CxTestSuite *cx_test_suite_kv_list(
void);
CxTestSuite *cx_test_suite_kv_list_specifics(
void);
CxTestSuite *cx_test_suite_list_set_ops(
void);
CxTestSuite *cx_test_suite_list_corner_cases(
void);
CxTestSuite *cx_test_suite_tree_low_level(
void);
CxTestSuite *cx_test_suite_tree_high_level(
void);
CxTestSuite *cx_test_suite_properties(
void);
CxTestSuite *cx_test_suite_json(
void);
CxTestSuite *cx_test_suite_printf(
void);
CxTestSuite *cx_test_suite_mempool(
void);
#define run_tests(suite) cx_test_run_stdout(suite); success += (suite)->success; failure += (suite)->failure; \
if (!cx_testing_allocator_verify(&testing_allocator))
break;
#define execute_test_suites(...)
unsigned success =
0, failure =
0; CxTestSuite* test_suites[] = {
__VA_ARGS__}; \
for (
size_t i =
0; i < cx_nmemb(test_suites) ; i++) {run_tests(test_suites[i]);} (
void)
0
#define free_test_suites
for (
size_t i =
0 ; i < cx_nmemb(test_suites) ; i++) {cx_test_suite_free(test_suites[i]);} (
void)
0
static int verify_testing_allocator(
void) {
printf(
"Verify Testing Allocator\n");
CxTestSuite *suite_ta = cx_test_suite_testing_allocator();
int result = suite_ta->failure >
0;
cx_test_suite_free(suite_ta);
return result;
}
int main(
void) {
if (verify_testing_allocator()) {
fprintf(stderr,
"Testing Allocator is not working - cannot perform tests!\n");
return EXIT_FAILURE;
}
CxTestingAllocator testing_allocator;
cx_testing_allocator_init(&testing_allocator);
cxDefaultAllocator = &testing_allocator.base;
printf(
"UCX Tests\n---------\n");
execute_test_suites(
cx_test_suite_szmul(),
cx_test_suite_allocator(),
cx_test_suite_streams(),
cx_test_suite_compare(),
cx_test_suite_string(),
cx_test_suite_string_to_number(),
cx_test_suite_buffer(),
cx_test_suite_hash_key(),
cx_test_suite_hash_map(),
cx_test_suite_iterator(),
cx_test_suite_empty_list(),
cx_test_suite_array_list(),
cx_test_suite_array_list_defaulted_funcs(),
cx_test_suite_linked_list(),
cx_test_suite_linked_list_defaulted_funcs(),
cx_test_suite_kv_list(),
cx_test_suite_kv_list_specifics(),
cx_test_suite_list_set_ops(),
cx_test_suite_list_corner_cases(),
cx_test_suite_tree_low_level(),
cx_test_suite_tree_high_level(),
cx_test_suite_properties(),
cx_test_suite_mempool(),
cx_test_suite_json(),
cx_test_suite_printf()
);
printf(
"=== OVERALL RESULT ===\n");
printf(
" Total: %u\n Success: %u\n Failure: %u\n",
success + failure, success, failure);
free_test_suites;
if (cx_testing_allocator_verify(&testing_allocator)) {
printf(
"\nAllocations verified successfully.\n");
}
else {
printf(
"\nVerifying allocations failed!\nSome cxMalloc() might not match a cxFree().\n"
"Aborting test execution.\nError must be in a function tested by the last executed test suite.\n"
"Total allocations: %u\n"
"Total frees: %u\n", testing_allocator.alloc_total, testing_allocator.free_total);
failure++;
}
cx_testing_allocator_destroy(&testing_allocator);
return failure >
0 ?
1 :
0;
}