210 UCX_TEST_END |
210 UCX_TEST_END |
211 |
211 |
212 ucx_array_free(array); |
212 ucx_array_free(array); |
213 } |
213 } |
214 |
214 |
215 UCX_TEST(test_ucx_array_append) { |
|
216 UcxArray *array = ucx_array_new(16, sizeof(int)); |
|
217 int *elements; |
|
218 |
|
219 ucx_array_append(array, 42); |
|
220 UCX_TEST_BEGIN |
|
221 |
|
222 elements = array->data; |
|
223 UCX_TEST_ASSERT(elements[0] == 42, "failed"); |
|
224 |
|
225 ucx_array_append(array, 13); |
|
226 ucx_array_append(array, 37); |
|
227 |
|
228 elements = array->data; |
|
229 UCX_TEST_ASSERT(array->size == 3, "incorrect size after append"); |
|
230 UCX_TEST_ASSERT(elements[1] == 13, "failed"); |
|
231 UCX_TEST_ASSERT(elements[2] == 37, "failed"); |
|
232 UCX_TEST_ASSERT(elements[0] == 42, |
|
233 "append corrupted previously inserted data"); |
|
234 |
|
235 UCX_TEST_END |
|
236 |
|
237 ucx_array_destroy(array); |
|
238 } |
|
239 |
|
240 UCX_TEST(test_ucx_array_append_struct) { |
|
241 struct teststruct { |
|
242 unsigned long long x; |
|
243 unsigned long long y; |
|
244 unsigned long long z; |
|
245 }; |
|
246 |
|
247 UcxArray *array = ucx_array_new(16, sizeof(struct teststruct)); |
|
248 struct teststruct *elements; |
|
249 |
|
250 struct teststruct data; |
|
251 data.x = 13; data.y = 37; data.z = 47; |
|
252 |
|
253 ucx_array_append(array, data); |
|
254 UCX_TEST_BEGIN |
|
255 |
|
256 elements = array->data; |
|
257 UCX_TEST_ASSERT(elements[0].x == 13, "failed"); |
|
258 UCX_TEST_ASSERT(elements[0].y == 37, "failed"); |
|
259 UCX_TEST_ASSERT(elements[0].z == 47, "failed"); |
|
260 |
|
261 data.x = 0; data.y = 8; data.z = 15; |
|
262 ucx_array_append(array, data); |
|
263 |
|
264 elements = array->data; |
|
265 UCX_TEST_ASSERT(array->size == 2, "incorrect size after append"); |
|
266 UCX_TEST_ASSERT(elements[1].x == 0, "failed"); |
|
267 UCX_TEST_ASSERT(elements[1].y == 8, "failed"); |
|
268 UCX_TEST_ASSERT(elements[1].z == 15, "failed"); |
|
269 |
|
270 UCX_TEST_ASSERT(elements[0].x == 13, |
|
271 "append corrupted previously inserted data"); |
|
272 UCX_TEST_ASSERT(elements[0].y == 37, |
|
273 "append corrupted previously inserted data"); |
|
274 UCX_TEST_ASSERT(elements[0].z == 47, |
|
275 "append corrupted previously inserted data"); |
|
276 |
|
277 UCX_TEST_END |
|
278 |
|
279 ucx_array_destroy(array); |
|
280 } |
|
281 |
|
282 UCX_TEST(test_ucx_array_prepend) { |
|
283 int *elems; |
|
284 UcxArray *array = ucx_array_new(16, sizeof(int)); |
|
285 |
|
286 ucx_array_prepend(array, 42); |
|
287 UCX_TEST_BEGIN |
|
288 |
|
289 elems = array->data; |
|
290 UCX_TEST_ASSERT(elems[0] == 42, "failed"); |
|
291 |
|
292 ucx_array_prepend(array, 37); |
|
293 ucx_array_prepend(array, 13); |
|
294 |
|
295 elems = array->data; |
|
296 UCX_TEST_ASSERT(array->size == 3, "incorrect size after prepend"); |
|
297 UCX_TEST_ASSERT(elems[0] == 13, "failed"); |
|
298 UCX_TEST_ASSERT(elems[1] == 37, "failed"); |
|
299 UCX_TEST_ASSERT(elems[2] == 42, |
|
300 "prepend corrupted previously inserted data"); |
|
301 |
|
302 UCX_TEST_END |
|
303 |
|
304 ucx_array_free(array); |
|
305 } |
|
306 |
|
307 UCX_TEST(test_ucx_array_set) { |
|
308 int *elems; |
|
309 UcxArray *array = ucx_array_new(16, sizeof(int)); |
|
310 |
|
311 UCX_TEST_BEGIN |
|
312 |
|
313 ucx_array_set(array, 7, 42); |
|
314 |
|
315 elems = array->data; |
|
316 UCX_TEST_ASSERT(elems[7] == 42, "failed"); |
|
317 UCX_TEST_ASSERT(array->size == 8, "array not resized on set"); |
|
318 UCX_TEST_ASSERT(array->capacity == 16, "capacity changed unnecessarily"); |
|
319 |
|
320 ucx_array_set(array, 27, 13); |
|
321 ucx_array_set(array, 28, 37); |
|
322 |
|
323 elems = array->data; |
|
324 UCX_TEST_ASSERT(elems[27] == 13, "failed"); |
|
325 UCX_TEST_ASSERT(elems[28] == 37, "failed"); |
|
326 UCX_TEST_ASSERT(array->size == 29, "array not resized on set"); |
|
327 UCX_TEST_ASSERT(array->capacity == 32, "capacity not grown"); |
|
328 |
|
329 UCX_TEST_END |
|
330 |
|
331 ucx_array_free(array); |
|
332 } |
|
333 |
215 |
334 UCX_TEST(test_ucx_array_equals) { |
216 UCX_TEST(test_ucx_array_equals) { |
335 UcxArray *a1 = ucx_array_new(16, sizeof(int32_t)); |
217 UcxArray *a1 = ucx_array_new(16, sizeof(int32_t)); |
336 UcxArray *a2 = ucx_array_new(16, sizeof(int32_t)); |
218 UcxArray *a2 = ucx_array_new(16, sizeof(int32_t)); |
337 UcxArray *a3 = ucx_array_new(16, sizeof(int64_t)); |
219 UcxArray *a3 = ucx_array_new(16, sizeof(int64_t)); |
641 ucx_array_free(expectedrev); |
523 ucx_array_free(expectedrev); |
642 ucx_array_free(expected); |
524 ucx_array_free(expected); |
643 ucx_array_free(array); |
525 ucx_array_free(array); |
644 } |
526 } |
645 |
527 |
646 UCX_TEST(test_ucx_array_autogrow) { |
|
647 int *elems; |
|
648 UcxArray *array = ucx_array_new(4, sizeof(int)); |
|
649 array->size = 3; |
|
650 elems = array->data; |
|
651 elems[0] = 47; |
|
652 elems[1] = 11; |
|
653 int x = 5; |
|
654 |
|
655 UCX_TEST_BEGIN |
|
656 |
|
657 void* oldptr = array->data; |
|
658 |
|
659 ucx_array_append(array, 5); |
|
660 UCX_TEST_ASSERT(array->capacity == 4 && array->data == oldptr, |
|
661 "array should not grow too early"); |
|
662 ucx_array_append(array, 5); |
|
663 elems = array->data; |
|
664 UCX_TEST_ASSERT(array->capacity == 8, "array did not grow"); |
|
665 UCX_TEST_ASSERT(array->size == 5, "incorrect size after grow"); |
|
666 UCX_TEST_ASSERT(elems[3] == 5 && elems[4] == 5, "corrupt data"); |
|
667 |
|
668 UCX_TEST_END |
|
669 ucx_array_free(array); |
|
670 } |
|
671 |
|
672 UCX_TEST(test_ucx_array_shrink) { |
528 UCX_TEST(test_ucx_array_shrink) { |
673 UcxArray *array = ucx_array_new(16, sizeof(int)); |
529 UcxArray *array = ucx_array_new(16, sizeof(int)); |
674 array->size = 4; |
530 array->size = 4; |
675 |
531 |
676 UCX_TEST_BEGIN |
532 UCX_TEST_BEGIN |
711 |
567 |
712 UCX_TEST_END |
568 UCX_TEST_END |
713 ucx_array_free(array); |
569 ucx_array_free(array); |
714 } |
570 } |
715 |
571 |
|
572 UCX_TEST(test_ucx_array_grow) { |
|
573 UcxArray *array = ucx_array_new(16, sizeof(int)); |
|
574 array->size = 12; |
|
575 |
|
576 UCX_TEST_BEGIN |
|
577 |
|
578 UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); |
|
579 UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); |
|
580 /* subsequent calls shall also be noops */ |
|
581 UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); |
|
582 UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); |
|
583 |
|
584 UCX_TEST_ASSERT(!ucx_array_grow(array, 6), "failed"); |
|
585 UCX_TEST_ASSERT(array->capacity == 18, "incorrect capacity after grow"); |
|
586 |
|
587 UCX_TEST_END |
|
588 ucx_array_free(array); |
|
589 } |
|
590 |
716 UCX_TEST(test_ucx_array_util_set) { |
591 UCX_TEST(test_ucx_array_util_set) { |
717 size_t capacity = 16; |
592 size_t capacity = 16; |
718 int* array = malloc(sizeof(int)*capacity); |
593 int* array = malloc(sizeof(int)*capacity); |
719 |
594 int x; |
720 UCX_TEST_BEGIN |
595 |
721 |
596 UCX_TEST_BEGIN |
722 UCX_ARRAY_UTIL_SET(&array, &capacity, 7, 42); |
597 |
|
598 x = 42; |
|
599 ucx_array_util_set(&array, &capacity, sizeof(int), 7, &x); |
723 |
600 |
724 UCX_TEST_ASSERT(array[7] == 42, "failed"); |
601 UCX_TEST_ASSERT(array[7] == 42, "failed"); |
725 UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); |
602 UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); |
726 |
603 |
727 UCX_ARRAY_UTIL_SET(&array, &capacity, 37, 13); |
604 x = 13; |
728 UCX_ARRAY_UTIL_SET(&array, &capacity, 38, 37); |
605 ucx_array_util_set(&array, &capacity, sizeof(int), 37, &x); |
|
606 x = 37; |
|
607 ucx_array_util_set(&array, &capacity, sizeof(int), 38, &x); |
729 |
608 |
730 UCX_TEST_ASSERT(array[37] == 13, "failed"); |
609 UCX_TEST_ASSERT(array[37] == 13, "failed"); |
731 UCX_TEST_ASSERT(array[38] == 37, "failed"); |
610 UCX_TEST_ASSERT(array[38] == 37, "failed"); |
732 UCX_TEST_ASSERT(capacity == 64, "capacity not grown"); |
611 UCX_TEST_ASSERT(capacity == 64, "capacity not grown"); |
733 |
612 |
734 UCX_TEST_END |
613 UCX_TEST_END |
735 |
614 |
736 free(array); |
615 free(array); |
737 } |
616 } |
|
617 |
|
618 |
|
619 UCX_TEST(test_ucx_array_util_setptr) { |
|
620 size_t capacity = 16; |
|
621 double** array = malloc(sizeof(double*)*capacity); |
|
622 double x, y, z; |
|
623 |
|
624 UCX_TEST_BEGIN |
|
625 |
|
626 ucx_array_util_setptr(&array, &capacity, 7, &x); |
|
627 |
|
628 UCX_TEST_ASSERT(array[7] == &x, "failed"); |
|
629 UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); |
|
630 |
|
631 ucx_array_util_setptr(&array, &capacity, 37, &y); |
|
632 ucx_array_util_setptr(&array, &capacity, 38, &z); |
|
633 |
|
634 UCX_TEST_ASSERT(array[37] == &y, "failed"); |
|
635 UCX_TEST_ASSERT(array[38] == &z, "failed"); |
|
636 UCX_TEST_ASSERT(capacity == 64, "capacity not grown"); |
|
637 |
|
638 UCX_TEST_END |
|
639 |
|
640 free(array); |
|
641 } |
|
642 |