diff -r 97c53f7ef5e4 -r 28a8ccc442b0 test/array_tests.c --- a/test/array_tests.c Wed Nov 06 21:01:25 2019 +0100 +++ b/test/array_tests.c Thu Nov 07 10:10:36 2019 +0100 @@ -212,124 +212,6 @@ ucx_array_free(array); } -UCX_TEST(test_ucx_array_append) { - UcxArray *array = ucx_array_new(16, sizeof(int)); - int *elements; - - ucx_array_append(array, 42); - UCX_TEST_BEGIN - - elements = array->data; - UCX_TEST_ASSERT(elements[0] == 42, "failed"); - - ucx_array_append(array, 13); - ucx_array_append(array, 37); - - elements = array->data; - UCX_TEST_ASSERT(array->size == 3, "incorrect size after append"); - UCX_TEST_ASSERT(elements[1] == 13, "failed"); - UCX_TEST_ASSERT(elements[2] == 37, "failed"); - UCX_TEST_ASSERT(elements[0] == 42, - "append corrupted previously inserted data"); - - UCX_TEST_END - - ucx_array_destroy(array); -} - -UCX_TEST(test_ucx_array_append_struct) { - struct teststruct { - unsigned long long x; - unsigned long long y; - unsigned long long z; - }; - - UcxArray *array = ucx_array_new(16, sizeof(struct teststruct)); - struct teststruct *elements; - - struct teststruct data; - data.x = 13; data.y = 37; data.z = 47; - - ucx_array_append(array, data); - UCX_TEST_BEGIN - - elements = array->data; - UCX_TEST_ASSERT(elements[0].x == 13, "failed"); - UCX_TEST_ASSERT(elements[0].y == 37, "failed"); - UCX_TEST_ASSERT(elements[0].z == 47, "failed"); - - data.x = 0; data.y = 8; data.z = 15; - ucx_array_append(array, data); - - elements = array->data; - UCX_TEST_ASSERT(array->size == 2, "incorrect size after append"); - UCX_TEST_ASSERT(elements[1].x == 0, "failed"); - UCX_TEST_ASSERT(elements[1].y == 8, "failed"); - UCX_TEST_ASSERT(elements[1].z == 15, "failed"); - - UCX_TEST_ASSERT(elements[0].x == 13, - "append corrupted previously inserted data"); - UCX_TEST_ASSERT(elements[0].y == 37, - "append corrupted previously inserted data"); - UCX_TEST_ASSERT(elements[0].z == 47, - "append corrupted previously inserted data"); - - UCX_TEST_END - - ucx_array_destroy(array); -} - -UCX_TEST(test_ucx_array_prepend) { - int *elems; - UcxArray *array = ucx_array_new(16, sizeof(int)); - - ucx_array_prepend(array, 42); - UCX_TEST_BEGIN - - elems = array->data; - UCX_TEST_ASSERT(elems[0] == 42, "failed"); - - ucx_array_prepend(array, 37); - ucx_array_prepend(array, 13); - - elems = array->data; - UCX_TEST_ASSERT(array->size == 3, "incorrect size after prepend"); - UCX_TEST_ASSERT(elems[0] == 13, "failed"); - UCX_TEST_ASSERT(elems[1] == 37, "failed"); - UCX_TEST_ASSERT(elems[2] == 42, - "prepend corrupted previously inserted data"); - - UCX_TEST_END - - ucx_array_free(array); -} - -UCX_TEST(test_ucx_array_set) { - int *elems; - UcxArray *array = ucx_array_new(16, sizeof(int)); - - UCX_TEST_BEGIN - - ucx_array_set(array, 7, 42); - - elems = array->data; - UCX_TEST_ASSERT(elems[7] == 42, "failed"); - UCX_TEST_ASSERT(array->size == 8, "array not resized on set"); - UCX_TEST_ASSERT(array->capacity == 16, "capacity changed unnecessarily"); - - ucx_array_set(array, 27, 13); - ucx_array_set(array, 28, 37); - - elems = array->data; - UCX_TEST_ASSERT(elems[27] == 13, "failed"); - UCX_TEST_ASSERT(elems[28] == 37, "failed"); - UCX_TEST_ASSERT(array->size == 29, "array not resized on set"); - UCX_TEST_ASSERT(array->capacity == 32, "capacity not grown"); - - UCX_TEST_END - - ucx_array_free(array); -} UCX_TEST(test_ucx_array_equals) { UcxArray *a1 = ucx_array_new(16, sizeof(int32_t)); @@ -643,32 +525,6 @@ ucx_array_free(array); } -UCX_TEST(test_ucx_array_autogrow) { - int *elems; - UcxArray *array = ucx_array_new(4, sizeof(int)); - array->size = 3; - elems = array->data; - elems[0] = 47; - elems[1] = 11; - int x = 5; - - UCX_TEST_BEGIN - - void* oldptr = array->data; - - ucx_array_append(array, 5); - UCX_TEST_ASSERT(array->capacity == 4 && array->data == oldptr, - "array should not grow too early"); - ucx_array_append(array, 5); - elems = array->data; - UCX_TEST_ASSERT(array->capacity == 8, "array did not grow"); - UCX_TEST_ASSERT(array->size == 5, "incorrect size after grow"); - UCX_TEST_ASSERT(elems[3] == 5 && elems[4] == 5, "corrupt data"); - - UCX_TEST_END - ucx_array_free(array); -} - UCX_TEST(test_ucx_array_shrink) { UcxArray *array = ucx_array_new(16, sizeof(int)); array->size = 4; @@ -713,19 +569,42 @@ ucx_array_free(array); } +UCX_TEST(test_ucx_array_grow) { + UcxArray *array = ucx_array_new(16, sizeof(int)); + array->size = 12; + + UCX_TEST_BEGIN + + UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); + UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); + /* subsequent calls shall also be noops */ + UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); + UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); + + UCX_TEST_ASSERT(!ucx_array_grow(array, 6), "failed"); + UCX_TEST_ASSERT(array->capacity == 18, "incorrect capacity after grow"); + + UCX_TEST_END + ucx_array_free(array); +} + UCX_TEST(test_ucx_array_util_set) { size_t capacity = 16; int* array = malloc(sizeof(int)*capacity); + int x; UCX_TEST_BEGIN - UCX_ARRAY_UTIL_SET(&array, &capacity, 7, 42); + x = 42; + ucx_array_util_set(&array, &capacity, sizeof(int), 7, &x); UCX_TEST_ASSERT(array[7] == 42, "failed"); UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); - UCX_ARRAY_UTIL_SET(&array, &capacity, 37, 13); - UCX_ARRAY_UTIL_SET(&array, &capacity, 38, 37); + x = 13; + ucx_array_util_set(&array, &capacity, sizeof(int), 37, &x); + x = 37; + ucx_array_util_set(&array, &capacity, sizeof(int), 38, &x); UCX_TEST_ASSERT(array[37] == 13, "failed"); UCX_TEST_ASSERT(array[38] == 37, "failed"); @@ -735,3 +614,29 @@ free(array); } + + +UCX_TEST(test_ucx_array_util_setptr) { + size_t capacity = 16; + double** array = malloc(sizeof(double*)*capacity); + double x, y, z; + + UCX_TEST_BEGIN + + ucx_array_util_setptr(&array, &capacity, 7, &x); + + UCX_TEST_ASSERT(array[7] == &x, "failed"); + UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); + + ucx_array_util_setptr(&array, &capacity, 37, &y); + ucx_array_util_setptr(&array, &capacity, 38, &z); + + UCX_TEST_ASSERT(array[37] == &y, "failed"); + UCX_TEST_ASSERT(array[38] == &z, "failed"); + UCX_TEST_ASSERT(capacity == 64, "capacity not grown"); + + UCX_TEST_END + + free(array); +} +