test/array_tests.c

changeset 369
28a8ccc442b0
parent 366
41a7cef34c19
     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 +

mercurial