1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include "util_allocator.h"
30 #include "cx/common.h"
31 #include "cx/test.h"
32
33 CxTestSuite *cx_test_suite_testing_allocator(
void);
34 CxTestSuite *cx_test_suite_szmul(
void);
35 CxTestSuite *cx_test_suite_allocator(
void);
36 CxTestSuite *cx_test_suite_streams(
void);
37 CxTestSuite *cx_test_suite_compare(
void);
38 CxTestSuite *cx_test_suite_string(
void);
39 CxTestSuite *cx_test_suite_string_to_number(
void);
40 CxTestSuite *cx_test_suite_buffer(
void);
41 CxTestSuite *cx_test_suite_hash_key(
void);
42 CxTestSuite *cx_test_suite_hash_map(
void);
43 CxTestSuite *cx_test_suite_iterator(
void);
44 CxTestSuite *cx_test_suite_empty_list(
void);
45 CxTestSuite *cx_test_suite_array_list(
void);
46 CxTestSuite *cx_test_suite_array_list_defaulted_funcs(
void);
47 CxTestSuite *cx_test_suite_linked_list(
void);
48 CxTestSuite *cx_test_suite_linked_list_defaulted_funcs(
void);
49 CxTestSuite *cx_test_suite_kv_list(
void);
50 CxTestSuite *cx_test_suite_kv_list_specifics(
void);
51 CxTestSuite *cx_test_suite_list_set_ops(
void);
52 CxTestSuite *cx_test_suite_list_corner_cases(
void);
53 CxTestSuite *cx_test_suite_tree_low_level(
void);
54 CxTestSuite *cx_test_suite_tree_high_level(
void);
55 CxTestSuite *cx_test_suite_properties(
void);
56 CxTestSuite *cx_test_suite_json(
void);
57 CxTestSuite *cx_test_suite_printf(
void);
58 CxTestSuite *cx_test_suite_mempool(
void);
59
60 #define break_on_failure false
61 #define run_tests(suite) cx_test_run_stdout(suite); success += (suite)->success; failure += (suite)->failure; \
62 if (!cx_testing_allocator_verify(&testing_allocator) || (break_on_failure && failure >
0))
break;
63 #define execute_test_suites(...)
unsigned success =
0, failure =
0; CxTestSuite* test_suites[] = {
__VA_ARGS__}; \
64 for (
size_t i =
0; i < cx_nmemb(test_suites) ; i++) {run_tests(test_suites[i]);} (
void)
0
65 #define free_test_suites
for (
size_t i =
0 ; i < cx_nmemb(test_suites) ; i++) {cx_test_suite_free(test_suites[i]);} (
void)
0
66
67 static int verify_testing_allocator(
void) {
68 printf(
"Verify Testing Allocator\n");
69 CxTestSuite *suite_ta = cx_test_suite_testing_allocator();
70 int result = suite_ta->failure >
0;
71 cx_test_suite_free(suite_ta);
72 return result;
73 }
74
75 int main(
void) {
76 if (verify_testing_allocator()) {
77 fprintf(stderr,
"Testing Allocator is not working - cannot perform tests!\n");
78 return EXIT_FAILURE;
79 }
80
81
82 CxTestingAllocator testing_allocator;
83 cx_testing_allocator_init(&testing_allocator);
84 cxDefaultAllocator = &testing_allocator.base;
85
86
87 printf(
"UCX Tests\n---------\n");
88
89 execute_test_suites(
90 cx_test_suite_szmul(),
91 cx_test_suite_allocator(),
92 cx_test_suite_streams(),
93 cx_test_suite_compare(),
94 cx_test_suite_string(),
95 cx_test_suite_string_to_number(),
96 cx_test_suite_buffer(),
97 cx_test_suite_hash_key(),
98 cx_test_suite_hash_map(),
99 cx_test_suite_iterator(),
100 cx_test_suite_empty_list(),
101 cx_test_suite_array_list(),
102 cx_test_suite_array_list_defaulted_funcs(),
103 cx_test_suite_linked_list(),
104 cx_test_suite_linked_list_defaulted_funcs(),
105 cx_test_suite_kv_list(),
106 cx_test_suite_kv_list_specifics(),
107 cx_test_suite_list_set_ops(),
108 cx_test_suite_list_corner_cases(),
109 cx_test_suite_tree_low_level(),
110 cx_test_suite_tree_high_level(),
111 cx_test_suite_properties(),
112 cx_test_suite_mempool(),
113 cx_test_suite_json(),
114 cx_test_suite_printf()
115 );
116 printf(
"=== OVERALL RESULT ===\n");
117 printf(
" Total: %u\n Success: %u\n Failure: %u\n",
118 success + failure, success, failure);
119 free_test_suites;
120
121 if (cx_testing_allocator_verify(&testing_allocator)) {
122 printf(
"\nAllocations verified successfully.\n");
123 }
else {
124 printf(
"\nVerifying allocations failed!\nSome cxMalloc() might not match a cxFree().\n"
125 "Aborting test execution.\nError must be in a function tested by the last executed test suite.\n"
126 "Total allocations: %u\n"
127 "Total frees: %u\n", testing_allocator.alloc_total, testing_allocator.free_total);
128 failure++;
129 }
130 cx_testing_allocator_destroy(&testing_allocator);
131
132 return failure >
0 ?
1 :
0;
133 }
134
135