1.1 --- a/test/array_tests.c Wed Nov 06 21:01:25 2019 +0100 1.2 +++ b/test/array_tests.c Thu Nov 07 10:10:36 2019 +0100 1.3 @@ -212,124 +212,6 @@ 1.4 ucx_array_free(array); 1.5 } 1.6 1.7 -UCX_TEST(test_ucx_array_append) { 1.8 - UcxArray *array = ucx_array_new(16, sizeof(int)); 1.9 - int *elements; 1.10 - 1.11 - ucx_array_append(array, 42); 1.12 - UCX_TEST_BEGIN 1.13 - 1.14 - elements = array->data; 1.15 - UCX_TEST_ASSERT(elements[0] == 42, "failed"); 1.16 - 1.17 - ucx_array_append(array, 13); 1.18 - ucx_array_append(array, 37); 1.19 - 1.20 - elements = array->data; 1.21 - UCX_TEST_ASSERT(array->size == 3, "incorrect size after append"); 1.22 - UCX_TEST_ASSERT(elements[1] == 13, "failed"); 1.23 - UCX_TEST_ASSERT(elements[2] == 37, "failed"); 1.24 - UCX_TEST_ASSERT(elements[0] == 42, 1.25 - "append corrupted previously inserted data"); 1.26 - 1.27 - UCX_TEST_END 1.28 - 1.29 - ucx_array_destroy(array); 1.30 -} 1.31 - 1.32 -UCX_TEST(test_ucx_array_append_struct) { 1.33 - struct teststruct { 1.34 - unsigned long long x; 1.35 - unsigned long long y; 1.36 - unsigned long long z; 1.37 - }; 1.38 - 1.39 - UcxArray *array = ucx_array_new(16, sizeof(struct teststruct)); 1.40 - struct teststruct *elements; 1.41 - 1.42 - struct teststruct data; 1.43 - data.x = 13; data.y = 37; data.z = 47; 1.44 - 1.45 - ucx_array_append(array, data); 1.46 - UCX_TEST_BEGIN 1.47 - 1.48 - elements = array->data; 1.49 - UCX_TEST_ASSERT(elements[0].x == 13, "failed"); 1.50 - UCX_TEST_ASSERT(elements[0].y == 37, "failed"); 1.51 - UCX_TEST_ASSERT(elements[0].z == 47, "failed"); 1.52 - 1.53 - data.x = 0; data.y = 8; data.z = 15; 1.54 - ucx_array_append(array, data); 1.55 - 1.56 - elements = array->data; 1.57 - UCX_TEST_ASSERT(array->size == 2, "incorrect size after append"); 1.58 - UCX_TEST_ASSERT(elements[1].x == 0, "failed"); 1.59 - UCX_TEST_ASSERT(elements[1].y == 8, "failed"); 1.60 - UCX_TEST_ASSERT(elements[1].z == 15, "failed"); 1.61 - 1.62 - UCX_TEST_ASSERT(elements[0].x == 13, 1.63 - "append corrupted previously inserted data"); 1.64 - UCX_TEST_ASSERT(elements[0].y == 37, 1.65 - "append corrupted previously inserted data"); 1.66 - UCX_TEST_ASSERT(elements[0].z == 47, 1.67 - "append corrupted previously inserted data"); 1.68 - 1.69 - UCX_TEST_END 1.70 - 1.71 - ucx_array_destroy(array); 1.72 -} 1.73 - 1.74 -UCX_TEST(test_ucx_array_prepend) { 1.75 - int *elems; 1.76 - UcxArray *array = ucx_array_new(16, sizeof(int)); 1.77 - 1.78 - ucx_array_prepend(array, 42); 1.79 - UCX_TEST_BEGIN 1.80 - 1.81 - elems = array->data; 1.82 - UCX_TEST_ASSERT(elems[0] == 42, "failed"); 1.83 - 1.84 - ucx_array_prepend(array, 37); 1.85 - ucx_array_prepend(array, 13); 1.86 - 1.87 - elems = array->data; 1.88 - UCX_TEST_ASSERT(array->size == 3, "incorrect size after prepend"); 1.89 - UCX_TEST_ASSERT(elems[0] == 13, "failed"); 1.90 - UCX_TEST_ASSERT(elems[1] == 37, "failed"); 1.91 - UCX_TEST_ASSERT(elems[2] == 42, 1.92 - "prepend corrupted previously inserted data"); 1.93 - 1.94 - UCX_TEST_END 1.95 - 1.96 - ucx_array_free(array); 1.97 -} 1.98 - 1.99 -UCX_TEST(test_ucx_array_set) { 1.100 - int *elems; 1.101 - UcxArray *array = ucx_array_new(16, sizeof(int)); 1.102 - 1.103 - UCX_TEST_BEGIN 1.104 - 1.105 - ucx_array_set(array, 7, 42); 1.106 - 1.107 - elems = array->data; 1.108 - UCX_TEST_ASSERT(elems[7] == 42, "failed"); 1.109 - UCX_TEST_ASSERT(array->size == 8, "array not resized on set"); 1.110 - UCX_TEST_ASSERT(array->capacity == 16, "capacity changed unnecessarily"); 1.111 - 1.112 - ucx_array_set(array, 27, 13); 1.113 - ucx_array_set(array, 28, 37); 1.114 - 1.115 - elems = array->data; 1.116 - UCX_TEST_ASSERT(elems[27] == 13, "failed"); 1.117 - UCX_TEST_ASSERT(elems[28] == 37, "failed"); 1.118 - UCX_TEST_ASSERT(array->size == 29, "array not resized on set"); 1.119 - UCX_TEST_ASSERT(array->capacity == 32, "capacity not grown"); 1.120 - 1.121 - UCX_TEST_END 1.122 - 1.123 - ucx_array_free(array); 1.124 -} 1.125 1.126 UCX_TEST(test_ucx_array_equals) { 1.127 UcxArray *a1 = ucx_array_new(16, sizeof(int32_t)); 1.128 @@ -643,32 +525,6 @@ 1.129 ucx_array_free(array); 1.130 } 1.131 1.132 -UCX_TEST(test_ucx_array_autogrow) { 1.133 - int *elems; 1.134 - UcxArray *array = ucx_array_new(4, sizeof(int)); 1.135 - array->size = 3; 1.136 - elems = array->data; 1.137 - elems[0] = 47; 1.138 - elems[1] = 11; 1.139 - int x = 5; 1.140 - 1.141 - UCX_TEST_BEGIN 1.142 - 1.143 - void* oldptr = array->data; 1.144 - 1.145 - ucx_array_append(array, 5); 1.146 - UCX_TEST_ASSERT(array->capacity == 4 && array->data == oldptr, 1.147 - "array should not grow too early"); 1.148 - ucx_array_append(array, 5); 1.149 - elems = array->data; 1.150 - UCX_TEST_ASSERT(array->capacity == 8, "array did not grow"); 1.151 - UCX_TEST_ASSERT(array->size == 5, "incorrect size after grow"); 1.152 - UCX_TEST_ASSERT(elems[3] == 5 && elems[4] == 5, "corrupt data"); 1.153 - 1.154 - UCX_TEST_END 1.155 - ucx_array_free(array); 1.156 -} 1.157 - 1.158 UCX_TEST(test_ucx_array_shrink) { 1.159 UcxArray *array = ucx_array_new(16, sizeof(int)); 1.160 array->size = 4; 1.161 @@ -713,19 +569,42 @@ 1.162 ucx_array_free(array); 1.163 } 1.164 1.165 +UCX_TEST(test_ucx_array_grow) { 1.166 + UcxArray *array = ucx_array_new(16, sizeof(int)); 1.167 + array->size = 12; 1.168 + 1.169 + UCX_TEST_BEGIN 1.170 + 1.171 + UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); 1.172 + UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); 1.173 + /* subsequent calls shall also be noops */ 1.174 + UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); 1.175 + UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); 1.176 + 1.177 + UCX_TEST_ASSERT(!ucx_array_grow(array, 6), "failed"); 1.178 + UCX_TEST_ASSERT(array->capacity == 18, "incorrect capacity after grow"); 1.179 + 1.180 + UCX_TEST_END 1.181 + ucx_array_free(array); 1.182 +} 1.183 + 1.184 UCX_TEST(test_ucx_array_util_set) { 1.185 size_t capacity = 16; 1.186 int* array = malloc(sizeof(int)*capacity); 1.187 + int x; 1.188 1.189 UCX_TEST_BEGIN 1.190 1.191 - UCX_ARRAY_UTIL_SET(&array, &capacity, 7, 42); 1.192 + x = 42; 1.193 + ucx_array_util_set(&array, &capacity, sizeof(int), 7, &x); 1.194 1.195 UCX_TEST_ASSERT(array[7] == 42, "failed"); 1.196 UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); 1.197 1.198 - UCX_ARRAY_UTIL_SET(&array, &capacity, 37, 13); 1.199 - UCX_ARRAY_UTIL_SET(&array, &capacity, 38, 37); 1.200 + x = 13; 1.201 + ucx_array_util_set(&array, &capacity, sizeof(int), 37, &x); 1.202 + x = 37; 1.203 + ucx_array_util_set(&array, &capacity, sizeof(int), 38, &x); 1.204 1.205 UCX_TEST_ASSERT(array[37] == 13, "failed"); 1.206 UCX_TEST_ASSERT(array[38] == 37, "failed"); 1.207 @@ -735,3 +614,29 @@ 1.208 1.209 free(array); 1.210 } 1.211 + 1.212 + 1.213 +UCX_TEST(test_ucx_array_util_setptr) { 1.214 + size_t capacity = 16; 1.215 + double** array = malloc(sizeof(double*)*capacity); 1.216 + double x, y, z; 1.217 + 1.218 + UCX_TEST_BEGIN 1.219 + 1.220 + ucx_array_util_setptr(&array, &capacity, 7, &x); 1.221 + 1.222 + UCX_TEST_ASSERT(array[7] == &x, "failed"); 1.223 + UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); 1.224 + 1.225 + ucx_array_util_setptr(&array, &capacity, 37, &y); 1.226 + ucx_array_util_setptr(&array, &capacity, 38, &z); 1.227 + 1.228 + UCX_TEST_ASSERT(array[37] == &y, "failed"); 1.229 + UCX_TEST_ASSERT(array[38] == &z, "failed"); 1.230 + UCX_TEST_ASSERT(capacity == 64, "capacity not grown"); 1.231 + 1.232 + UCX_TEST_END 1.233 + 1.234 + free(array); 1.235 +} 1.236 +