| 73 CX_TEST_ASSERT(arr.capacity >= 6); |
72 CX_TEST_ASSERT(arr.capacity >= 6); |
| 74 } |
73 } |
| 75 cx_array_free(arr); |
74 cx_array_free(arr); |
| 76 } |
75 } |
| 77 |
76 |
| 78 CX_TEST(test_array_copy_overlap) { |
|
| 79 CX_ARRAY_DECLARE_SIZED(char, arr, uint8_t); |
|
| 80 cx_array_initialize(arr, 16); |
|
| 81 strcpy(arr, "Hello, World!"); |
|
| 82 CX_TEST_DO { |
|
| 83 errno = 0; |
|
| 84 int result = cx_array_simple_copy(arr, 7, arr, 14); |
|
| 85 CX_TEST_ASSERT(result == 0); |
|
| 86 CX_TEST_ASSERT(errno == 0); |
|
| 87 CX_TEST_ASSERT(arr_size == 21); |
|
| 88 CX_TEST_ASSERT(arr_capacity == 32); |
|
| 89 CX_TEST_ASSERT(0 == memcmp(arr, "Hello, Hello, World!\0", 21)); |
|
| 90 } |
|
| 91 cxFreeDefault(arr); |
|
| 92 } |
|
| 93 |
|
| 94 CX_TEST(test_array_reserve) { |
77 CX_TEST(test_array_reserve) { |
| 95 CX_TEST_DO { |
78 CX_ARRAY(int, arr); |
| 96 // TODO: create new test for the new API |
79 cx_array_init(arr, 5); |
| 97 } |
80 arr.data[0] = 2; |
| |
81 arr.data[1] = 3; |
| |
82 arr.data[2] = 5; |
| |
83 arr.size = 3; |
| |
84 CX_TEST_DO { |
| |
85 // extend |
| |
86 CX_TEST_ASSERT(0 == cx_array_reserve(arr, 8)); |
| |
87 CX_TEST_ASSERT(arr.size == 3); |
| |
88 CX_TEST_ASSERT(arr.capacity == 8); |
| |
89 CX_TEST_ASSERT(arr.data[0] == 2); |
| |
90 CX_TEST_ASSERT(arr.data[1] == 3); |
| |
91 CX_TEST_ASSERT(arr.data[2] == 5); |
| |
92 |
| |
93 // shrink |
| |
94 CX_TEST_ASSERT(0 == cx_array_reserve(arr, 2)); |
| |
95 CX_TEST_ASSERT(arr.size == 2); |
| |
96 CX_TEST_ASSERT(arr.capacity == 2); |
| |
97 CX_TEST_ASSERT(arr.data[0] == 2); |
| |
98 CX_TEST_ASSERT(arr.data[1] == 3); |
| |
99 } |
| |
100 cx_array_free(arr); |
| |
101 } |
| |
102 |
| |
103 CX_TEST(test_array_move_to_new) { |
| |
104 CX_ARRAY(int, arr); |
| |
105 int fixed[5] = {2, 4, 6}; |
| |
106 cx_array_init_fixed(arr, fixed, 3); |
| |
107 CX_TEST_DO { |
| |
108 CX_TEST_ASSERT(arr.data == fixed); |
| |
109 CX_TEST_ASSERT(arr.size == 3); |
| |
110 CX_TEST_ASSERT(arr.capacity == 5); |
| |
111 |
| |
112 CX_TEST_ASSERT(0 == cx_array_move_to_new(arr, 8)); |
| |
113 |
| |
114 CX_TEST_ASSERT(arr.data != fixed); |
| |
115 CX_TEST_ASSERT(arr.size == 3); |
| |
116 CX_TEST_ASSERT(arr.capacity == 8); |
| |
117 CX_TEST_ASSERT(arr.data[0] == 2); |
| |
118 CX_TEST_ASSERT(arr.data[1] == 4); |
| |
119 CX_TEST_ASSERT(arr.data[2] == 6); |
| |
120 |
| |
121 for (int x = 8 ; x <= 18 ; x+=2) { |
| |
122 cx_array_add(arr, &x); |
| |
123 } |
| |
124 |
| |
125 CX_TEST_ASSERT(arr.size == 9); |
| |
126 CX_TEST_ASSERT(arr.capacity >= 9); |
| |
127 |
| |
128 for (int x = 1 ; x <= 9 ; x++) { |
| |
129 CX_TEST_ASSERT(arr.data[x-1] == 2*x); |
| |
130 } |
| |
131 } |
| |
132 cx_array_free(arr); |
| 98 } |
133 } |
| 99 |
134 |
| 100 CX_TEST(test_array_insert_sorted) { |
135 CX_TEST(test_array_insert_sorted) { |
| 101 int d1 = 50; |
136 int d1 = 50; |
| 102 int d2 = 80; |
137 int d2 = 80; |
| 113 int expected[31] = { |
148 int expected[31] = { |
| 114 10, 40, 50, 51, 52, 54, 56, 56, 57, 58, 58, 59, 60, 62, 64, 65, 67, |
149 10, 40, 50, 51, 52, 54, 56, 56, 57, 58, 58, 59, 60, 62, 64, 65, 67, |
| 115 70, 71, 71, 72, 75, 75, 75, 77, 78, 80, 90, 90, 120, 130 |
150 70, 71, 71, 72, 75, 75, 75, 77, 78, 80, 90, 90, 120, 130 |
| 116 }; |
151 }; |
| 117 |
152 |
| 118 CX_ARRAY_DECLARE(int, array); |
153 CX_ARRAY(int, array); |
| 119 cx_array_initialize(array, 4); |
154 cx_array_init(array, 4); |
| 120 |
155 |
| 121 CX_TEST_DO { |
156 CX_TEST_DO { |
| 122 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d1, cx_cmp_int)); |
157 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d1)); |
| 123 CX_TEST_ASSERT(array_size == 1); |
158 CX_TEST_ASSERT(array.size == 1); |
| 124 CX_TEST_ASSERT(array_capacity == 4); |
159 CX_TEST_ASSERT(array.capacity == 4); |
| 125 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d2, cx_cmp_int)); |
160 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d2)); |
| 126 CX_TEST_ASSERT(array_size == 2); |
161 CX_TEST_ASSERT(array.size == 2); |
| 127 CX_TEST_ASSERT(array_capacity == 4); |
162 CX_TEST_ASSERT(array.capacity == 4); |
| 128 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d3, cx_cmp_int)); |
163 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d3)); |
| 129 CX_TEST_ASSERT(array_size == 3); |
164 CX_TEST_ASSERT(array.size == 3); |
| 130 CX_TEST_ASSERT(array_capacity == 4); |
165 CX_TEST_ASSERT(array.capacity == 4); |
| 131 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d4, cx_cmp_int)); |
166 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d4)); |
| 132 CX_TEST_ASSERT(array_size == 4); |
167 CX_TEST_ASSERT(array.size == 4); |
| 133 CX_TEST_ASSERT(array_capacity == 4); |
168 CX_TEST_ASSERT(array.capacity == 4); |
| 134 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d5, cx_cmp_int)); |
169 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d5)); |
| 135 CX_TEST_ASSERT(array_size == 5); |
170 CX_TEST_ASSERT(array.size == 5); |
| 136 CX_TEST_ASSERT(array_capacity >= 5); |
171 CX_TEST_ASSERT(array.capacity >= 5); |
| 137 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d6a, 6, cx_cmp_int)); |
172 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d6a, 6)); |
| 138 CX_TEST_ASSERT(array_size == 11); |
173 CX_TEST_ASSERT(array.size == 11); |
| 139 CX_TEST_ASSERT(array_capacity >= 11); |
174 CX_TEST_ASSERT(array.capacity >= 11); |
| 140 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d7a, 6, cx_cmp_int)); |
175 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d7a, 6)); |
| 141 CX_TEST_ASSERT(array_size == 17); |
176 CX_TEST_ASSERT(array.size == 17); |
| 142 CX_TEST_ASSERT(array_capacity >= 17); |
177 CX_TEST_ASSERT(array.capacity >= 17); |
| 143 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d8, cx_cmp_int)); |
178 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d8)); |
| 144 CX_TEST_ASSERT(array_size == 18); |
179 CX_TEST_ASSERT(array.size == 18); |
| 145 CX_TEST_ASSERT(array_capacity >= 18); |
180 CX_TEST_ASSERT(array.capacity >= 18); |
| 146 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d9, cx_cmp_int)); |
181 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d9)); |
| 147 CX_TEST_ASSERT(array_size == 19); |
182 CX_TEST_ASSERT(array.size == 19); |
| 148 CX_TEST_ASSERT(array_capacity >= 19); |
183 CX_TEST_ASSERT(array.capacity >= 19); |
| 149 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d10a, 3, cx_cmp_int)); |
184 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d10a, 3)); |
| 150 CX_TEST_ASSERT(array_size == 22); |
185 CX_TEST_ASSERT(array.size == 22); |
| 151 CX_TEST_ASSERT(array_capacity >= 22); |
186 CX_TEST_ASSERT(array.capacity >= 22); |
| 152 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d11a, 6, cx_cmp_int)); |
187 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d11a, 6)); |
| 153 CX_TEST_ASSERT(array_size == 28); |
188 CX_TEST_ASSERT(array.size == 28); |
| 154 CX_TEST_ASSERT(array_capacity >= 28); |
189 CX_TEST_ASSERT(array.capacity >= 28); |
| 155 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d12a, 3, cx_cmp_int)); |
190 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d12a, 3)); |
| 156 CX_TEST_ASSERT(array_size == 31); |
191 CX_TEST_ASSERT(array.size == 31); |
| 157 CX_TEST_ASSERT(array_capacity >= 31); |
192 CX_TEST_ASSERT(array.capacity >= 31); |
| 158 |
193 |
| 159 CX_TEST_ASSERT(0 == memcmp(array, expected, 31 * sizeof(int))); |
194 CX_TEST_ASSERT(0 == memcmp(array.data, expected, 31 * sizeof(int))); |
| 160 } |
195 } |
| 161 cxFreeDefault(array); |
196 cx_array_free(array); |
| 162 } |
197 } |
| 163 |
198 |
| 164 CX_TEST(test_array_insert_unique) { |
199 CX_TEST(test_array_insert_unique) { |
| 165 int d1 = 50; |
200 int d1 = 50; |
| 166 int d2 = 80; |
201 int d2 = 80; |
| 176 int expected[22] = { |
211 int expected[22] = { |
| 177 40, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, |
212 40, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, |
| 178 65, 67, 70, 75, 77, 78, 80, 90, 95, 100, 110 |
213 65, 67, 70, 75, 77, 78, 80, 90, 95, 100, 110 |
| 179 }; |
214 }; |
| 180 |
215 |
| 181 CX_ARRAY_DECLARE(int, array); |
216 CX_ARRAY(int, array); |
| 182 cx_array_initialize(array, 4); |
217 cx_array_init(array, 4); |
| 183 |
218 |
| 184 CX_TEST_DO { |
219 CX_TEST_DO { |
| 185 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d1, cx_cmp_int)); |
220 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d1)); |
| 186 CX_TEST_ASSERT(array_size == 1); |
221 CX_TEST_ASSERT(array.size == 1); |
| 187 CX_TEST_ASSERT(array_capacity == 4); |
222 CX_TEST_ASSERT(array.capacity == 4); |
| 188 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d2, cx_cmp_int)); |
223 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d2)); |
| 189 CX_TEST_ASSERT(array_size == 2); |
224 CX_TEST_ASSERT(array.size == 2); |
| 190 CX_TEST_ASSERT(array_capacity == 4); |
225 CX_TEST_ASSERT(array.capacity == 4); |
| 191 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d3, cx_cmp_int)); |
226 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d3)); |
| 192 CX_TEST_ASSERT(array_size == 3); |
227 CX_TEST_ASSERT(array.size == 3); |
| 193 CX_TEST_ASSERT(array_capacity == 4); |
228 CX_TEST_ASSERT(array.capacity == 4); |
| 194 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d4, cx_cmp_int)); |
229 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d4)); |
| 195 CX_TEST_ASSERT(array_size == 4); |
230 CX_TEST_ASSERT(array.size == 4); |
| 196 CX_TEST_ASSERT(array_capacity == 4); |
231 CX_TEST_ASSERT(array.capacity == 4); |
| 197 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d5, cx_cmp_int)); |
232 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d5)); |
| 198 CX_TEST_ASSERT(array_size == 5); |
233 CX_TEST_ASSERT(array.size == 5); |
| 199 CX_TEST_ASSERT(array_capacity >= 5); |
234 CX_TEST_ASSERT(array.capacity >= 5); |
| 200 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d6a, 6, cx_cmp_int)); |
235 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d6a, 6)); |
| 201 CX_TEST_ASSERT(array_size == 11); |
236 CX_TEST_ASSERT(array.size == 11); |
| 202 CX_TEST_ASSERT(array_capacity >= 11); |
237 CX_TEST_ASSERT(array.capacity >= 11); |
| 203 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d7a, 6, cx_cmp_int)); |
238 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d7a, 6)); |
| 204 CX_TEST_ASSERT(array_size == 17); |
239 CX_TEST_ASSERT(array.size == 17); |
| 205 CX_TEST_ASSERT(array_capacity >= 17); |
240 CX_TEST_ASSERT(array.capacity >= 17); |
| 206 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d8, cx_cmp_int)); |
241 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d8)); |
| 207 CX_TEST_ASSERT(array_size == 18); |
242 CX_TEST_ASSERT(array.size == 18); |
| 208 CX_TEST_ASSERT(array_capacity >= 18); |
243 CX_TEST_ASSERT(array.capacity >= 18); |
| 209 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d9, cx_cmp_int)); |
244 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d9)); |
| 210 CX_TEST_ASSERT(array_size == 18); |
245 CX_TEST_ASSERT(array.size == 18); |
| 211 CX_TEST_ASSERT(array_capacity >= 18); |
246 CX_TEST_ASSERT(array.capacity >= 18); |
| 212 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d10a, 3, cx_cmp_int)); |
247 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d10a, 3)); |
| 213 CX_TEST_ASSERT(array_size == 19); |
248 CX_TEST_ASSERT(array.size == 19); |
| 214 CX_TEST_ASSERT(array_capacity >= 19); |
249 CX_TEST_ASSERT(array.capacity >= 19); |
| 215 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d11a, 8, cx_cmp_int)); |
250 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d11a, 8)); |
| 216 CX_TEST_ASSERT(array_size == 22); |
251 CX_TEST_ASSERT(array.size == 22); |
| 217 CX_TEST_ASSERT(array_capacity >= 22); |
252 CX_TEST_ASSERT(array.capacity >= 22); |
| 218 |
253 |
| 219 CX_TEST_ASSERT(0 == memcmp(array, expected, 22 * sizeof(int))); |
254 CX_TEST_ASSERT(0 == memcmp(array.data, expected, 22 * sizeof(int))); |
| 220 } |
255 } |
| 221 cxFreeDefault(array); |
256 cx_array_free(array); |
| 222 } |
257 } |
| 223 |
258 |
| 224 CX_TEST(test_array_binary_search) { |
259 CX_TEST(test_array_binary_search) { |
| 225 int array[18] = { |
260 int array[18] = { |
| 226 40, 50, 51, 52, 54, 56, 57, 58, 60, |
261 40, 50, 51, 52, 54, 56, 57, 58, 60, |