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 run_tests(suite) cx_test_run_stdout(suite); success += (suite)->success; failure += (suite)->failure; \
61 if (!cx_testing_allocator_verify(&testing_allocator))
break;
62 #define execute_test_suites(...)
unsigned success =
0, failure =
0; CxTestSuite* test_suites[] = {
__VA_ARGS__}; \
63 for (
size_t i =
0; i < cx_nmemb(test_suites) ; i++) {run_tests(test_suites[i]);} (
void)
0
64 #define free_test_suites
for (
size_t i =
0 ; i < cx_nmemb(test_suites) ; i++) {cx_test_suite_free(test_suites[i]);} (
void)
0
65
66 static int verify_testing_allocator(
void) {
67 printf(
"Verify Testing Allocator\n");
68 CxTestSuite *suite_ta = cx_test_suite_testing_allocator();
69 int result = suite_ta->failure >
0;
70 cx_test_suite_free(suite_ta);
71 return result;
72 }
73
74 int main(
void) {
75 if (verify_testing_allocator()) {
76 fprintf(stderr,
"Testing Allocator is not working - cannot perform tests!\n");
77 return EXIT_FAILURE;
78 }
79
80
81 CxTestingAllocator testing_allocator;
82 cx_testing_allocator_init(&testing_allocator);
83 cxDefaultAllocator = &testing_allocator.base;
84
85
86 printf(
"UCX Tests\n---------\n");
87
88 execute_test_suites(
89 cx_test_suite_szmul(),
90 cx_test_suite_allocator(),
91 cx_test_suite_streams(),
92 cx_test_suite_compare(),
93 cx_test_suite_string(),
94 cx_test_suite_string_to_number(),
95 cx_test_suite_buffer(),
96 cx_test_suite_hash_key(),
97 cx_test_suite_hash_map(),
98 cx_test_suite_iterator(),
99 cx_test_suite_empty_list(),
100 cx_test_suite_array_list(),
101 cx_test_suite_array_list_defaulted_funcs(),
102 cx_test_suite_linked_list(),
103 cx_test_suite_linked_list_defaulted_funcs(),
104 cx_test_suite_kv_list(),
105 cx_test_suite_kv_list_specifics(),
106 cx_test_suite_list_set_ops(),
107 cx_test_suite_list_corner_cases(),
108 cx_test_suite_tree_low_level(),
109 cx_test_suite_tree_high_level(),
110 cx_test_suite_properties(),
111 cx_test_suite_mempool(),
112 cx_test_suite_json(),
113 cx_test_suite_printf()
114 );
115 printf(
"=== OVERALL RESULT ===\n");
116 printf(
" Total: %u\n Success: %u\n Failure: %u\n",
117 success + failure, success, failure);
118 free_test_suites;
119
120 if (cx_testing_allocator_verify(&testing_allocator)) {
121 printf(
"\nAllocations verified successfully.\n");
122 }
else {
123 printf(
"\nVerifying allocations failed!\nSome cxMalloc() might not match a cxFree().\n"
124 "Aborting test execution.\nError must be in a function tested by the last executed test suite.\n"
125 "Total allocations: %u\n"
126 "Total frees: %u\n", testing_allocator.alloc_total, testing_allocator.free_total);
127 failure++;
128 }
129 cx_testing_allocator_destroy(&testing_allocator);
130
131 return failure >
0 ?
1 :
0;
132 }
133
134