1.1 --- a/tests/test_list.cpp Fri Apr 07 11:30:28 2023 +0200 1.2 +++ b/tests/test_list.cpp Sun Apr 09 19:03:58 2023 +0200 1.3 @@ -592,8 +592,7 @@ 1.4 ) { 1.5 auto len = testdata_len; 1.6 cx_for_n (i, len) EXPECT_EQ(cxListAdd(list, &testdata.data[i]), 0); 1.7 - EXPECT_EQ(list->size, len); 1.8 - EXPECT_GE(list->capacity, list->size); 1.9 + EXPECT_EQ(cxListSize(list), len); 1.10 cx_for_n (i, len) EXPECT_EQ(*(int *) cxListAt(list, i), testdata.data[i]); 1.11 cx_for_n (i, len) ++testdata.data[i]; 1.12 if (as_pointer) { 1.13 @@ -607,17 +606,16 @@ 1.14 int a = 5, b = 47, c = 13, d = 42; 1.15 1.16 EXPECT_NE(cxListInsert(list, 1, &a), 0); 1.17 - EXPECT_EQ(list->size, 0); 1.18 + EXPECT_EQ(cxListSize(list), 0); 1.19 EXPECT_EQ(cxListInsert(list, 0, &a), 0); 1.20 - EXPECT_EQ(list->size, 1); 1.21 + EXPECT_EQ(cxListSize(list), 1); 1.22 EXPECT_EQ(cxListInsert(list, 0, &b), 0); 1.23 - EXPECT_EQ(list->size, 2); 1.24 + EXPECT_EQ(cxListSize(list), 2); 1.25 EXPECT_EQ(cxListInsert(list, 1, &c), 0); 1.26 - EXPECT_EQ(list->size, 3); 1.27 + EXPECT_EQ(cxListSize(list), 3); 1.28 EXPECT_EQ(cxListInsert(list, 3, &d), 0); 1.29 1.30 - ASSERT_EQ(list->size, 4); 1.31 - EXPECT_GE(list->capacity, list->size); 1.32 + ASSERT_EQ(cxListSize(list), 4); 1.33 1.34 EXPECT_EQ(*(int *) cxListAt(list, 0), 47); 1.35 EXPECT_EQ(*(int *) cxListAt(list, 1), 13); 1.36 @@ -672,8 +670,7 @@ 1.37 void verifyRemove(CxList *list) const { 1.38 EXPECT_EQ(cxListRemove(list, 2), 0); 1.39 EXPECT_EQ(cxListRemove(list, 4), 0); 1.40 - EXPECT_EQ(list->size, testdata_len - 2); 1.41 - EXPECT_GE(list->capacity, list->size); 1.42 + EXPECT_EQ(cxListSize(list), testdata_len - 2); 1.43 EXPECT_EQ(*(int *) cxListAt(list, 0), testdata.data[0]); 1.44 EXPECT_EQ(*(int *) cxListAt(list, 1), testdata.data[1]); 1.45 EXPECT_EQ(*(int *) cxListAt(list, 2), testdata.data[3]); 1.46 @@ -681,8 +678,7 @@ 1.47 EXPECT_EQ(*(int *) cxListAt(list, 4), testdata.data[6]); 1.48 1.49 EXPECT_EQ(cxListRemove(list, 0), 0); 1.50 - EXPECT_EQ(list->size, testdata_len - 3); 1.51 - EXPECT_GE(list->capacity, list->size); 1.52 + EXPECT_EQ(cxListSize(list), testdata_len - 3); 1.53 EXPECT_EQ(*(int *) cxListAt(list, 0), testdata.data[1]); 1.54 EXPECT_EQ(*(int *) cxListAt(list, 1), testdata.data[3]); 1.55 1.56 @@ -691,7 +687,7 @@ 1.57 1.58 static void verifyClear(CxList *list) { 1.59 cxListClear(list); 1.60 - EXPECT_EQ(0, list->size); 1.61 + EXPECT_EQ(0, cxListSize(list)); 1.62 } 1.63 1.64 static unsigned destr_test_ctr; 1.65 @@ -717,33 +713,33 @@ 1.66 cxListRemove(list, 15); 1.67 EXPECT_EQ(1, destr_test_ctr); 1.68 EXPECT_EQ(testdata.data[15], destr_last_value + off); 1.69 - EXPECT_EQ(testdata_len - destr_test_ctr, list->size); 1.70 + EXPECT_EQ(testdata_len - destr_test_ctr, cxListSize(list)); 1.71 cxListRemove(list, 47); 1.72 EXPECT_EQ(2, destr_test_ctr); 1.73 EXPECT_EQ(testdata.data[48], destr_last_value + off); 1.74 - EXPECT_EQ(testdata_len - destr_test_ctr, list->size); 1.75 + EXPECT_EQ(testdata_len - destr_test_ctr, cxListSize(list)); 1.76 1.77 auto iter = cxListMutIteratorAt(list, 7); 1.78 cxIteratorNext(iter); 1.79 EXPECT_EQ(2, destr_test_ctr); 1.80 EXPECT_EQ(testdata.data[48], destr_last_value + off); 1.81 - EXPECT_EQ(testdata_len - destr_test_ctr, list->size); 1.82 + EXPECT_EQ(testdata_len - destr_test_ctr, cxListSize(list)); 1.83 cxIteratorFlagRemoval(iter); 1.84 cxIteratorNext(iter); 1.85 EXPECT_EQ(3, destr_test_ctr); 1.86 EXPECT_EQ(testdata.data[8], destr_last_value + off); 1.87 - EXPECT_EQ(testdata_len - destr_test_ctr, list->size); 1.88 + EXPECT_EQ(testdata_len - destr_test_ctr, cxListSize(list)); 1.89 1.90 iter = cxListMutBackwardsIteratorAt(list, 5); 1.91 cxIteratorNext(iter); 1.92 EXPECT_EQ(3, destr_test_ctr); 1.93 EXPECT_EQ(testdata.data[8], destr_last_value + off); 1.94 - EXPECT_EQ(testdata_len - destr_test_ctr, list->size); 1.95 + EXPECT_EQ(testdata_len - destr_test_ctr, cxListSize(list)); 1.96 cxIteratorFlagRemoval(iter); 1.97 cxIteratorNext(iter); 1.98 EXPECT_EQ(4, destr_test_ctr); 1.99 EXPECT_EQ(testdata.data[4], destr_last_value + off); 1.100 - EXPECT_EQ(testdata_len - destr_test_ctr, list->size); 1.101 + EXPECT_EQ(testdata_len - destr_test_ctr, cxListSize(list)); 1.102 1.103 cxListClear(list); 1.104 EXPECT_EQ(testdata_len, destr_test_ctr); 1.105 @@ -754,20 +750,18 @@ 1.106 1.107 void verifySimpleDestructor(CxList *list) { 1.108 destr_test_ctr = 0; 1.109 - list->content_destructor_type = CX_DESTRUCTOR_SIMPLE; 1.110 list->simple_destructor = simple_destr_test_fun; 1.111 verifyAnyDestructor(list); 1.112 } 1.113 1.114 void verifyAdvancedDestructor(CxList *list) { 1.115 destr_test_ctr = 0; 1.116 - list->content_destructor_type = CX_DESTRUCTOR_ADVANCED; 1.117 - list->advanced_destructor.func = advanced_destr_test_fun; 1.118 + list->advanced_destructor = advanced_destr_test_fun; 1.119 verifyAnyDestructor(list); 1.120 } 1.121 1.122 static void verifySwap(CxList *list) { 1.123 - ASSERT_EQ(list->size, 0); 1.124 + ASSERT_EQ(cxListSize(list), 0); 1.125 1.126 int original[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; 1.127 int swapped[16] = {8, 4, 14, 3, 1, 5, 9, 12, 0, 6, 11, 10, 7, 15, 2, 13}; 1.128 @@ -816,11 +810,11 @@ 1.129 1.130 void verifyAt(CxList *list) const { 1.131 auto len = testdata_len; 1.132 - EXPECT_EQ(list->size, len); 1.133 + EXPECT_EQ(cxListSize(list), len); 1.134 cx_for_n (i, len) { 1.135 EXPECT_EQ(*(int *) cxListAt(list, i), testdata.data[i]); 1.136 } 1.137 - EXPECT_EQ(cxListAt(list, list->size), nullptr); 1.138 + EXPECT_EQ(cxListAt(list, cxListSize(list)), nullptr); 1.139 } 1.140 1.141 void verifyFind(CxList *list) const { 1.142 @@ -838,7 +832,7 @@ 1.143 } 1.144 1.145 int notinlist = -1; 1.146 - EXPECT_EQ(list->size, cxListFind(list, ¬inlist)); 1.147 + EXPECT_EQ(cxListSize(list), cxListFind(list, ¬inlist)); 1.148 } 1.149 1.150 void verifySort(CxList *list) const { 1.151 @@ -856,7 +850,7 @@ 1.152 EXPECT_EQ(*x, testdata.data[iter.index]); 1.153 i++; 1.154 } 1.155 - ASSERT_EQ(i, list->size); 1.156 + ASSERT_EQ(i, cxListSize(list)); 1.157 iter = cxListBackwardsIterator(list); 1.158 cx_foreach(int*, x, iter) { 1.159 ASSERT_EQ(i - 1, iter.index); 1.160 @@ -887,7 +881,7 @@ 1.161 j++; 1.162 } 1.163 ASSERT_EQ(i, 0); 1.164 - ASSERT_EQ(list->size, len / 2); 1.165 + ASSERT_EQ(cxListSize(list), len / 2); 1.166 cx_for_n(j, len / 2) ASSERT_EQ(*(int *) cxListAt(list, j), testdata.data[j * 2]); 1.167 } 1.168 1.169 @@ -912,11 +906,11 @@ 1.170 EXPECT_TRUE(cxIteratorValid(iter)); 1.171 EXPECT_EQ(iter.index, 1); 1.172 EXPECT_EQ(*(int *) cxIteratorCurrent(iter), 0); 1.173 - iter = cxListMutIteratorAt(list, list->size); 1.174 + iter = cxListMutIteratorAt(list, cxListSize(list)); 1.175 cxListInsertBefore(&iter, &newdata[3]); 1.176 EXPECT_FALSE(cxIteratorValid(iter)); 1.177 EXPECT_EQ(iter.index, 9); 1.178 - iter = cxListMutIteratorAt(list, list->size); 1.179 + iter = cxListMutIteratorAt(list, cxListSize(list)); 1.180 cxListInsertAfter(&iter, &newdata[4]); 1.181 EXPECT_FALSE(cxIteratorValid(iter)); 1.182 EXPECT_EQ(iter.index, 10); 1.183 @@ -939,16 +933,16 @@ 1.184 EXPECT_EQ(cxListCompare(left, right), 0); 1.185 int x = 42; 1.186 cxListAdd(left, &x); 1.187 - ASSERT_GT(left->size, right->size); 1.188 + ASSERT_GT(cxListSize(left), cxListSize(right)); 1.189 EXPECT_GT(cxListCompare(left, right), 0); 1.190 EXPECT_LT(cxListCompare(right, left), 0); 1.191 cxListAdd(right, &x); 1.192 - ASSERT_EQ(left->size, right->size); 1.193 + ASSERT_EQ(cxListSize(left), cxListSize(right)); 1.194 EXPECT_EQ(cxListCompare(left, right), 0); 1.195 int a = 5, b = 10; 1.196 cxListInsert(left, 15, &a); 1.197 cxListInsert(right, 15, &b); 1.198 - ASSERT_EQ(left->size, right->size); 1.199 + ASSERT_EQ(cxListSize(left), cxListSize(right)); 1.200 EXPECT_LT(cxListCompare(left, right), 0); 1.201 EXPECT_GT(cxListCompare(right, left), 0); 1.202 *(int *) cxListAt(left, 15) = 10; 1.203 @@ -972,7 +966,7 @@ 1.204 auto list = autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, 47)); 1.205 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.206 cxListStorePointers(list); 1.207 - EXPECT_EQ(list->itemsize, sizeof(void *)); 1.208 + EXPECT_EQ(list->item_size, sizeof(void *)); 1.209 EXPECT_NE(list->cl, nullptr); 1.210 EXPECT_NE(list->climpl, nullptr); 1.211 EXPECT_TRUE(cxListIsStoringPointers(list)); 1.212 @@ -985,10 +979,11 @@ 1.213 TEST_F(LinkedList, cxLinkedListCreate) { 1.214 CxList *list = autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int))); 1.215 ASSERT_NE(list, nullptr); 1.216 - EXPECT_EQ(list->itemsize, sizeof(int)); 1.217 - EXPECT_EQ(list->capacity, (size_t) -1); 1.218 - EXPECT_EQ(list->content_destructor_type, CX_DESTRUCTOR_NONE); 1.219 - EXPECT_EQ(list->size, 0); 1.220 + EXPECT_EQ(list->item_size, sizeof(int)); 1.221 + EXPECT_EQ(list->simple_destructor, nullptr); 1.222 + EXPECT_EQ(list->advanced_destructor, nullptr); 1.223 + EXPECT_EQ(list->destructor_data, nullptr); 1.224 + EXPECT_EQ(cxListSize(list), 0); 1.225 EXPECT_EQ(list->allocator, &testingAllocator); 1.226 EXPECT_EQ(list->cmpfunc, cx_cmp_int); 1.227 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.228 @@ -997,30 +992,37 @@ 1.229 TEST_F(LinkedList, cxLinkedListCreateSimple) { 1.230 CxList *list = autofree(cxLinkedListCreateSimple(sizeof(int))); 1.231 ASSERT_NE(list, nullptr); 1.232 - EXPECT_EQ(list->itemsize, sizeof(int)); 1.233 - EXPECT_EQ(list->capacity, (size_t) -1); 1.234 + EXPECT_EQ(list->item_size, sizeof(int)); 1.235 EXPECT_EQ(list->cmpfunc, nullptr); 1.236 EXPECT_EQ(list->allocator, cxDefaultAllocator); 1.237 + EXPECT_EQ(list->simple_destructor, nullptr); 1.238 + EXPECT_EQ(list->advanced_destructor, nullptr); 1.239 + EXPECT_EQ(list->destructor_data, nullptr); 1.240 + EXPECT_EQ(cxListSize(list), 0); 1.241 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.242 } 1.243 1.244 TEST_F(LinkedList, cxLinkedListCreateSimpleForPointers) { 1.245 CxList *list = autofree(cxLinkedListCreateSimple(CX_STORE_POINTERS)); 1.246 ASSERT_NE(list, nullptr); 1.247 - EXPECT_EQ(list->itemsize, sizeof(void *)); 1.248 - EXPECT_EQ(list->capacity, (size_t) -1); 1.249 + EXPECT_EQ(list->item_size, sizeof(void *)); 1.250 EXPECT_EQ(list->cmpfunc, nullptr); 1.251 EXPECT_EQ(list->allocator, cxDefaultAllocator); 1.252 + EXPECT_EQ(list->simple_destructor, nullptr); 1.253 + EXPECT_EQ(list->advanced_destructor, nullptr); 1.254 + EXPECT_EQ(list->destructor_data, nullptr); 1.255 + EXPECT_EQ(cxListSize(list), 0); 1.256 EXPECT_TRUE(cxListIsStoringPointers(list)); 1.257 } 1.258 1.259 TEST_F(ArrayList, cxArrayListCreate) { 1.260 CxList *list = autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 8)); 1.261 ASSERT_NE(list, nullptr); 1.262 - EXPECT_EQ(list->itemsize, sizeof(int)); 1.263 - EXPECT_EQ(list->capacity, 8); 1.264 - EXPECT_EQ(list->content_destructor_type, CX_DESTRUCTOR_NONE); 1.265 - EXPECT_EQ(list->size, 0); 1.266 + EXPECT_EQ(list->item_size, sizeof(int)); 1.267 + EXPECT_EQ(list->simple_destructor, nullptr); 1.268 + EXPECT_EQ(list->advanced_destructor, nullptr); 1.269 + EXPECT_EQ(list->destructor_data, nullptr); 1.270 + EXPECT_EQ(cxListSize(list), 0); 1.271 EXPECT_EQ(list->allocator, &testingAllocator); 1.272 EXPECT_EQ(list->cmpfunc, cx_cmp_int); 1.273 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.274 @@ -1031,8 +1033,11 @@ 1.275 ASSERT_NE(list, nullptr); 1.276 EXPECT_EQ(list->cmpfunc, nullptr); 1.277 EXPECT_EQ(list->allocator, cxDefaultAllocator); 1.278 - EXPECT_EQ(list->itemsize, sizeof(int)); 1.279 - EXPECT_EQ(list->capacity, 8); 1.280 + EXPECT_EQ(list->item_size, sizeof(int)); 1.281 + EXPECT_EQ(list->simple_destructor, nullptr); 1.282 + EXPECT_EQ(list->advanced_destructor, nullptr); 1.283 + EXPECT_EQ(list->destructor_data, nullptr); 1.284 + EXPECT_EQ(cxListSize(list), 0); 1.285 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.286 } 1.287 1.288 @@ -1041,8 +1046,7 @@ 1.289 ASSERT_NE(list, nullptr); 1.290 EXPECT_EQ(list->cmpfunc, nullptr); 1.291 EXPECT_EQ(list->allocator, cxDefaultAllocator); 1.292 - EXPECT_EQ(list->itemsize, sizeof(void *)); 1.293 - EXPECT_EQ(list->capacity, 8); 1.294 + EXPECT_EQ(list->item_size, sizeof(void *)); 1.295 EXPECT_TRUE(cxListIsStoringPointers(list)); 1.296 } 1.297 1.298 @@ -1313,7 +1317,6 @@ 1.299 TEST_F(PointerLinkedList, DestroySimpleDestructor) { 1.300 int item = 0; 1.301 auto list = cxLinkedListCreate(cxDefaultAllocator, cx_cmp_int, CX_STORE_POINTERS); 1.302 - list->content_destructor_type = CX_DESTRUCTOR_SIMPLE; 1.303 list->simple_destructor = [](void *elem) { *(int *) elem = 42; }; 1.304 cxListAdd(list, &item); 1.305 cxListDestroy(list); 1.306 @@ -1323,9 +1326,8 @@ 1.307 TEST_F(PointerLinkedList, DestroyAdvancedDestructor) { 1.308 void *item = cxMalloc(&testingAllocator, sizeof(int)); 1.309 auto list = cxLinkedListCreate(cxDefaultAllocator, cx_cmp_int, CX_STORE_POINTERS); 1.310 - list->content_destructor_type = CX_DESTRUCTOR_ADVANCED; 1.311 - list->advanced_destructor.data = &testingAllocator; 1.312 - list->advanced_destructor.func = (cx_destructor_func2) cxFree; 1.313 + list->destructor_data = &testingAllocator; 1.314 + list->advanced_destructor = (cx_destructor_func2) cxFree; 1.315 cxListAdd(list, item); 1.316 ASSERT_FALSE(testingAllocator.verify()); 1.317 cxListDestroy(list);