35 |
35 |
36 #include "cx/allocator.h" |
36 #include "cx/allocator.h" |
37 #include <errno.h> |
37 #include <errno.h> |
38 |
38 |
39 CX_TEST(test_allocator_default_malloc) { |
39 CX_TEST(test_allocator_default_malloc) { |
40 void *test = cxMalloc(cxDefaultAllocator, 16); |
40 void *test = cxMallocDefault(16); |
41 CX_TEST_DO { |
41 CX_TEST_DO { |
42 CX_TEST_ASSERT(test != NULL); |
42 CX_TEST_ASSERT(test != NULL); |
43 // we cannot assert sth. but valgrind will detect an error |
43 // we cannot assert sth. but valgrind will detect an error |
44 memcpy(test, "0123456789ABCDEF", 16); |
44 memcpy(test, "0123456789ABCDEF", 16); |
45 } |
45 } |
46 cxFree(cxDefaultAllocator, test); |
46 cxFreeDefault(test); |
47 } |
47 } |
48 |
48 |
49 CX_TEST(test_allocator_default_calloc) { |
49 CX_TEST(test_allocator_default_calloc) { |
50 char *test = cxCalloc(cxDefaultAllocator, 8, 2); |
50 char *test = cxCallocDefault(8, 2); |
51 CX_TEST_DO { |
51 CX_TEST_DO { |
52 CX_TEST_ASSERT(test != NULL); |
52 CX_TEST_ASSERT(test != NULL); |
53 for (int i = 0; i < 16; i++) { |
53 for (int i = 0; i < 16; i++) { |
54 CX_TEST_ASSERT(test[i] == 0); |
54 CX_TEST_ASSERT(test[i] == 0); |
55 } |
55 } |
56 } |
56 } |
57 cxFree(cxDefaultAllocator, test); |
57 cxFreeDefault(test); |
58 } |
58 } |
59 |
59 |
60 CX_TEST(test_allocator_default_realloc) { |
60 CX_TEST(test_allocator_default_realloc) { |
61 char *test = cxCalloc(cxDefaultAllocator, 8, 1); |
61 char *test = cxCallocDefault(8, 1); |
62 memcpy(test, "Test", 5); |
62 memcpy(test, "Test", 5); |
63 CX_TEST_DO { |
63 CX_TEST_DO { |
64 test = cxRealloc(cxDefaultAllocator, test, 16); |
64 test = cxReallocDefault(test, 16); |
65 CX_TEST_ASSERT(test != NULL); |
65 CX_TEST_ASSERT(test != NULL); |
66 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
66 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
67 } |
67 } |
68 cxFree(cxDefaultAllocator, test); |
68 cxFreeDefault(test); |
69 } |
69 } |
70 |
70 |
71 CX_TEST(test_allocator_default_reallocarray) { |
71 CX_TEST(test_allocator_default_reallocarray) { |
72 char *test = cxCalloc(cxDefaultAllocator, 8, 1); |
72 char *test = cxCallocDefault(8, 1); |
73 memcpy(test, "Test", 5); |
73 memcpy(test, "Test", 5); |
74 CX_TEST_DO { |
74 CX_TEST_DO { |
75 test = cxReallocArray(cxDefaultAllocator, test, 16, 2); |
75 test = cxReallocArrayDefault(test, 16, 2); |
76 CX_TEST_ASSERT(test != NULL); |
76 CX_TEST_ASSERT(test != NULL); |
77 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
77 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
78 } |
78 } |
79 cxFree(cxDefaultAllocator, test); |
79 cxFreeDefault(test); |
80 } |
80 } |
81 |
81 |
82 CX_TEST(test_allocator_default_reallocarray_overflow) { |
82 CX_TEST(test_allocator_default_reallocarray_overflow) { |
83 char *test = cxCalloc(cxDefaultAllocator, 8, 1); |
83 char *test = cxCallocDefault(8, 1); |
84 memcpy(test, "Test", 5); |
84 memcpy(test, "Test", 5); |
85 CX_TEST_DO { |
85 CX_TEST_DO { |
86 void *fail = cxReallocArray(cxDefaultAllocator, test, SIZE_MAX/2, 4); |
86 void *fail = cxReallocArrayDefault(test, SIZE_MAX/2, 4); |
87 CX_TEST_ASSERT(errno == EOVERFLOW); |
87 CX_TEST_ASSERT(errno == EOVERFLOW); |
88 CX_TEST_ASSERT(fail == NULL); |
88 CX_TEST_ASSERT(fail == NULL); |
89 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
89 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
90 } |
90 } |
91 cxFree(cxDefaultAllocator, test); |
91 cxFreeDefault(test); |
92 } |
92 } |
93 |
93 |
94 CX_TEST(test_allocator_default_free) { |
94 CX_TEST(test_allocator_default_free) { |
95 void *test = cxMalloc(cxDefaultAllocator, 16); |
95 void *test = cxMallocDefault(16); |
96 CX_TEST_DO { |
96 CX_TEST_DO { |
97 // we cannot assert sth. but valgrind will detect an error |
97 // we cannot assert sth. but valgrind will detect an error |
98 cxFree(cxDefaultAllocator, test); |
98 cxFreeDefault(test); |
99 CX_TEST_ASSERT(true); |
99 CX_TEST_ASSERT(true); |
100 } |
100 } |
101 } |
101 } |
102 |
102 |
103 CX_TEST(test_allocator_reallocate) { |
103 CX_TEST(test_allocator_reallocate) { |
104 char *test = cxCalloc(cxDefaultAllocator, 8, 1); |
104 char *test = cxCallocDefault(8, 1); |
105 memcpy(test, "Test", 5); |
105 memcpy(test, "Test", 5); |
106 CX_TEST_DO { |
106 CX_TEST_DO { |
107 int ret = cxReallocate(cxDefaultAllocator, &test, 16); |
107 int ret = cxReallocateDefault(&test, 16); |
108 CX_TEST_ASSERT(ret == 0); |
108 CX_TEST_ASSERT(ret == 0); |
109 CX_TEST_ASSERT(test != NULL); |
109 CX_TEST_ASSERT(test != NULL); |
110 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
110 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
111 } |
111 } |
112 cxFree(cxDefaultAllocator, test); |
112 cxFreeDefault(test); |
113 } |
113 } |
114 |
114 |
115 CX_TEST(test_allocator_reallocate_low_level) { |
115 CX_TEST(test_allocator_reallocate_low_level) { |
116 void *test = calloc(8, 1); |
116 void *test = calloc(8, 1); |
117 memcpy(test, "Test", 5); |
117 memcpy(test, "Test", 5); |
123 } |
123 } |
124 free(test); |
124 free(test); |
125 } |
125 } |
126 |
126 |
127 CX_TEST(test_allocator_reallocatearray) { |
127 CX_TEST(test_allocator_reallocatearray) { |
128 char *test = cxCalloc(cxDefaultAllocator, 8, 1); |
128 char *test = cxCallocDefault(8, 1); |
129 memcpy(test, "Test", 5); |
129 memcpy(test, "Test", 5); |
130 CX_TEST_DO { |
130 CX_TEST_DO { |
131 int ret = cxReallocateArray(cxDefaultAllocator, &test, 16, 2); |
131 int ret = cxReallocateArrayDefault(&test, 16, 2); |
132 CX_TEST_ASSERT(ret == 0); |
132 CX_TEST_ASSERT(ret == 0); |
133 CX_TEST_ASSERT(test != NULL); |
133 CX_TEST_ASSERT(test != NULL); |
134 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
134 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
135 } |
135 } |
136 cxFree(cxDefaultAllocator, test); |
136 cxFreeDefault(test); |
137 } |
137 } |
138 |
138 |
139 CX_TEST(test_allocator_reallocatearray_overflow) { |
139 CX_TEST(test_allocator_reallocatearray_overflow) { |
140 char *test = cxCalloc(cxDefaultAllocator, 8, 1); |
140 char *test = cxCallocDefault(8, 1); |
141 memcpy(test, "Test", 5); |
141 memcpy(test, "Test", 5); |
142 CX_TEST_DO { |
142 CX_TEST_DO { |
143 int ret = cxReallocateArray(cxDefaultAllocator, &test, SIZE_MAX/2, 4); |
143 int ret = cxReallocateArrayDefault(&test, SIZE_MAX/2, 4); |
144 CX_TEST_ASSERT(ret != 0); |
144 CX_TEST_ASSERT(ret != 0); |
145 CX_TEST_ASSERT(errno == EOVERFLOW); |
145 CX_TEST_ASSERT(errno == EOVERFLOW); |
146 CX_TEST_ASSERT(test != NULL); |
146 CX_TEST_ASSERT(test != NULL); |
147 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
147 CX_TEST_ASSERT(0 == strcmp(test, "Test")); |
148 } |
148 } |
149 cxFree(cxDefaultAllocator, test); |
149 cxFreeDefault(test); |
150 } |
150 } |
151 |
151 |
152 CX_TEST(test_allocator_reallocatearray_low_level) { |
152 CX_TEST(test_allocator_reallocatearray_low_level) { |
153 char *test = calloc(8, 1); |
153 char *test = calloc(8, 1); |
154 memcpy(test, "Test", 5); |
154 memcpy(test, "Test", 5); |