Sun, 09 Apr 2023 19:37:00 +0200
add pointer array list tests
tests/test_list.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/tests/test_list.cpp Sun Apr 09 19:06:16 2023 +0200 1.2 +++ b/tests/test_list.cpp Sun Apr 09 19:37:00 2023 +0200 1.3 @@ -586,6 +586,13 @@ 1.4 return list; 1.5 } 1.6 1.7 + auto pointerArrayListFromTestData() const -> CxList * { 1.8 + auto list = autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, CX_STORE_POINTERS, 256)); 1.9 + // note: cannot use cxListAddArray() because we don't have a list of pointers 1.10 + cx_for_n(i, testdata_len) cxListAdd(list, &testdata.data[i]); 1.11 + return list; 1.12 + } 1.13 + 1.14 void verifyAdd( 1.15 CxList *list, 1.16 bool as_pointer 1.17 @@ -962,6 +969,9 @@ 1.18 class ArrayList : public HighLevelTest { 1.19 }; 1.20 1.21 +class PointerArrayList : public HighLevelTest { 1.22 +}; 1.23 + 1.24 TEST_F(PointerLinkedList, cxListStorePointers) { 1.25 auto list = autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, 47)); 1.26 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.27 @@ -1002,7 +1012,7 @@ 1.28 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.29 } 1.30 1.31 -TEST_F(LinkedList, cxLinkedListCreateSimpleForPointers) { 1.32 +TEST_F(PointerLinkedList, cxLinkedListCreateSimpleForPointers) { 1.33 CxList *list = autofree(cxLinkedListCreateSimple(CX_STORE_POINTERS)); 1.34 ASSERT_NE(list, nullptr); 1.35 EXPECT_EQ(list->item_size, sizeof(void *)); 1.36 @@ -1041,7 +1051,7 @@ 1.37 EXPECT_FALSE(cxListIsStoringPointers(list)); 1.38 } 1.39 1.40 -TEST_F(ArrayList, cxArrayListCreateSimpleForPointers) { 1.41 +TEST_F(PointerArrayList, cxArrayListCreateSimpleForPointers) { 1.42 CxList *list = autofree(cxArrayListCreateSimple(CX_STORE_POINTERS, 8)); 1.43 ASSERT_NE(list, nullptr); 1.44 EXPECT_EQ(list->cmpfunc, nullptr); 1.45 @@ -1065,6 +1075,11 @@ 1.46 verifyAdd(list, false); 1.47 } 1.48 1.49 +TEST_F(PointerArrayList, cxListAdd) { 1.50 + auto list = autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, CX_STORE_POINTERS, 8)); 1.51 + verifyAdd(list, true); 1.52 +} 1.53 + 1.54 TEST_F(LinkedList, cxListInsert) { 1.55 verifyInsert(autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int)))); 1.56 } 1.57 @@ -1077,6 +1092,10 @@ 1.58 verifyInsert(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 2))); 1.59 } 1.60 1.61 +TEST_F(PointerArrayList, cxListInsert) { 1.62 + verifyInsert(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, CX_STORE_POINTERS, 2))); 1.63 +} 1.64 + 1.65 TEST_F(LinkedList, cxListInsertArray) { 1.66 verifyInsertArray(autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int)))); 1.67 } 1.68 @@ -1089,6 +1108,10 @@ 1.69 verifyInsertArray(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 4))); 1.70 } 1.71 1.72 +TEST_F(PointerArrayList, cxListInsertArray) { 1.73 + verifyInsertArray(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, CX_STORE_POINTERS, 4)), true); 1.74 +} 1.75 + 1.76 TEST_F(LinkedList, cxListRemove) { 1.77 verifyRemove(linkedListFromTestData()); 1.78 } 1.79 @@ -1101,6 +1124,10 @@ 1.80 verifyRemove(arrayListFromTestData()); 1.81 } 1.82 1.83 +TEST_F(PointerArrayList, cxListRemove) { 1.84 + verifyRemove(pointerArrayListFromTestData()); 1.85 +} 1.86 + 1.87 TEST_F(LinkedList, cxListClear) { 1.88 verifyClear(linkedListFromTestData()); 1.89 } 1.90 @@ -1113,6 +1140,10 @@ 1.91 verifyClear(arrayListFromTestData()); 1.92 } 1.93 1.94 +TEST_F(PointerArrayList, cxListClear) { 1.95 + verifyClear(pointerArrayListFromTestData()); 1.96 +} 1.97 + 1.98 TEST_F(LinkedList, cxListSwap) { 1.99 verifySwap(autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int)))); 1.100 } 1.101 @@ -1125,6 +1156,10 @@ 1.102 verifySwap(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 16))); 1.103 } 1.104 1.105 +TEST_F(PointerArrayList, cxListSwap) { 1.106 + verifySwap(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, CX_STORE_POINTERS, 16))); 1.107 +} 1.108 + 1.109 TEST_F(LinkedList, cxListSwapNoSBO) { 1.110 CX_DISABLE_LINKED_LIST_SWAP_SBO = true; 1.111 verifySwap(autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int)))); 1.112 @@ -1137,12 +1172,6 @@ 1.113 CX_DISABLE_LINKED_LIST_SWAP_SBO = false; 1.114 } 1.115 1.116 -TEST_F(ArrayList, cxListSwapNoSBO) { 1.117 - CX_DISABLE_LINKED_LIST_SWAP_SBO = true; 1.118 - verifySwap(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 16))); 1.119 - CX_DISABLE_LINKED_LIST_SWAP_SBO = false; 1.120 -} 1.121 - 1.122 TEST_F(LinkedList, cxListAt) { 1.123 verifyAt(linkedListFromTestData()); 1.124 } 1.125 @@ -1155,6 +1184,10 @@ 1.126 verifyAt(arrayListFromTestData()); 1.127 } 1.128 1.129 +TEST_F(PointerArrayList, cxListAt) { 1.130 + verifyAt(pointerArrayListFromTestData()); 1.131 +} 1.132 + 1.133 TEST_F(LinkedList, cxListFind) { 1.134 verifyFind(linkedListFromTestData()); 1.135 } 1.136 @@ -1167,6 +1200,10 @@ 1.137 verifyFind(arrayListFromTestData()); 1.138 } 1.139 1.140 +TEST_F(PointerArrayList, cxListFind) { 1.141 + verifyFind(pointerArrayListFromTestData()); 1.142 +} 1.143 + 1.144 TEST_F(LinkedList, cxListSort) { 1.145 verifySort(linkedListFromTestData()); 1.146 } 1.147 @@ -1179,6 +1216,10 @@ 1.148 verifySort(arrayListFromTestData()); 1.149 } 1.150 1.151 +TEST_F(PointerArrayList, cxListSort) { 1.152 + verifySort(pointerArrayListFromTestData()); 1.153 +} 1.154 + 1.155 TEST_F(LinkedList, Iterator) { 1.156 verifyIterator(linkedListFromTestData()); 1.157 } 1.158 @@ -1191,6 +1232,10 @@ 1.159 verifyIterator(arrayListFromTestData()); 1.160 } 1.161 1.162 +TEST_F(PointerArrayList, Iterator) { 1.163 + verifyIterator(pointerArrayListFromTestData()); 1.164 +} 1.165 + 1.166 TEST_F(LinkedList, InsertViaIterator) { 1.167 int fivenums[] = {0, 1, 2, 3, 4, 5}; 1.168 CxList *list = autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int))); 1.169 @@ -1213,6 +1258,14 @@ 1.170 verifyInsertViaIterator(list); 1.171 } 1.172 1.173 +TEST_F(PointerArrayList, InsertViaIterator) { 1.174 + int fivenums[] = {0, 1, 2, 3, 4, 5}; 1.175 + auto list = autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, CX_STORE_POINTERS, 4)); 1.176 + // note: cannot use cxListAddArray() because we don't have a list of pointers 1.177 + cx_for_n(i, 5) cxListAdd(list, &fivenums[i]); 1.178 + verifyInsertViaIterator(list); 1.179 +} 1.180 + 1.181 TEST_F(LinkedList, cxListReverse) { 1.182 verifyReverse(linkedListFromTestData()); 1.183 } 1.184 @@ -1225,6 +1278,10 @@ 1.185 verifyReverse(arrayListFromTestData()); 1.186 } 1.187 1.188 +TEST_F(PointerArrayList, cxListReverse) { 1.189 + verifyReverse(pointerArrayListFromTestData()); 1.190 +} 1.191 + 1.192 TEST_F(LinkedList, cxListCompare) { 1.193 auto left = linkedListFromTestData(); 1.194 auto right = linkedListFromTestData(); 1.195 @@ -1243,6 +1300,12 @@ 1.196 verifyCompare(left, right); 1.197 } 1.198 1.199 +TEST_F(LinkedList, cxListCompareWithPtrArrayList) { 1.200 + auto left = linkedListFromTestData(); 1.201 + auto right = pointerArrayListFromTestData(); 1.202 + verifyCompare(left, right); 1.203 +} 1.204 + 1.205 TEST_F(PointerLinkedList, cxListCompare) { 1.206 auto left = pointerLinkedListFromTestData(); 1.207 auto right = pointerLinkedListFromTestData(); 1.208 @@ -1261,6 +1324,12 @@ 1.209 verifyCompare(left, right); 1.210 } 1.211 1.212 +TEST_F(PointerLinkedList, cxListCompareWithPtrArrayList) { 1.213 + auto left = pointerLinkedListFromTestData(); 1.214 + auto right = pointerArrayListFromTestData(); 1.215 + verifyCompare(left, right); 1.216 +} 1.217 + 1.218 TEST_F(ArrayList, cxListCompare) { 1.219 auto left = arrayListFromTestData(); 1.220 auto right = arrayListFromTestData(); 1.221 @@ -1279,6 +1348,36 @@ 1.222 verifyCompare(left, right); 1.223 } 1.224 1.225 +TEST_F(ArrayList, cxListCompareWithPtrArrayList) { 1.226 + auto left = arrayListFromTestData(); 1.227 + auto right = pointerArrayListFromTestData(); 1.228 + verifyCompare(left, right); 1.229 +} 1.230 + 1.231 +TEST_F(PointerArrayList, cxListCompare) { 1.232 + auto left = pointerArrayListFromTestData(); 1.233 + auto right = pointerArrayListFromTestData(); 1.234 + verifyCompare(left, right); 1.235 +} 1.236 + 1.237 +TEST_F(PointerArrayList, cxListCompareWithPtrList) { 1.238 + auto left = pointerArrayListFromTestData(); 1.239 + auto right = pointerLinkedListFromTestData(); 1.240 + verifyCompare(left, right); 1.241 +} 1.242 + 1.243 +TEST_F(PointerArrayList, cxListCompareWithNormalList) { 1.244 + auto left = pointerArrayListFromTestData(); 1.245 + auto right = linkedListFromTestData(); 1.246 + verifyCompare(left, right); 1.247 +} 1.248 + 1.249 +TEST_F(PointerArrayList, cxListCompareWithNormalArrayList) { 1.250 + auto left = pointerArrayListFromTestData(); 1.251 + auto right = arrayListFromTestData(); 1.252 + verifyCompare(left, right); 1.253 +} 1.254 + 1.255 TEST_F(LinkedList, SimpleDestructor) { 1.256 verifySimpleDestructor(linkedListFromTestData()); 1.257 } 1.258 @@ -1291,6 +1390,10 @@ 1.259 verifySimpleDestructor(arrayListFromTestData()); 1.260 } 1.261 1.262 +TEST_F(PointerArrayList, SimpleDestructor) { 1.263 + verifySimpleDestructor(pointerArrayListFromTestData()); 1.264 +} 1.265 + 1.266 TEST_F(LinkedList, AdvancedDestructor) { 1.267 verifyAdvancedDestructor(linkedListFromTestData()); 1.268 } 1.269 @@ -1303,6 +1406,10 @@ 1.270 verifyAdvancedDestructor(arrayListFromTestData()); 1.271 } 1.272 1.273 +TEST_F(PointerArrayList, AdvancedDestructor) { 1.274 + verifyAdvancedDestructor(pointerArrayListFromTestData()); 1.275 +} 1.276 + 1.277 TEST_F(PointerLinkedList, DestroyNoDestructor) { 1.278 void *item = cxMalloc(&testingAllocator, sizeof(int)); 1.279 auto list = cxLinkedListCreate(cxDefaultAllocator, cx_cmp_int, CX_STORE_POINTERS); 1.280 @@ -1333,3 +1440,35 @@ 1.281 cxListDestroy(list); 1.282 EXPECT_TRUE(testingAllocator.verify()); 1.283 } 1.284 + 1.285 +TEST_F(PointerArrayList, DestroyNoDestructor) { 1.286 + void *item = cxMalloc(&testingAllocator, sizeof(int)); 1.287 + auto list = cxArrayListCreate(cxDefaultAllocator, cx_cmp_int, CX_STORE_POINTERS, 4); 1.288 + cxListAdd(list, item); 1.289 + ASSERT_FALSE(testingAllocator.verify()); 1.290 + cxListDestroy(list); 1.291 + EXPECT_FALSE(testingAllocator.verify()); 1.292 + cxFree(&testingAllocator, item); 1.293 + EXPECT_TRUE(testingAllocator.verify()); 1.294 +} 1.295 + 1.296 +TEST_F(PointerArrayList, DestroySimpleDestructor) { 1.297 + int item = 0; 1.298 + auto list = cxArrayListCreate(cxDefaultAllocator, cx_cmp_int, CX_STORE_POINTERS, 4); 1.299 + list->simple_destructor = [](void *elem) { *(int *) elem = 42; }; 1.300 + cxListAdd(list, &item); 1.301 + cxListDestroy(list); 1.302 + EXPECT_EQ(item, 42); 1.303 +} 1.304 + 1.305 +TEST_F(PointerArrayList, DestroyAdvancedDestructor) { 1.306 + void *item = cxMalloc(&testingAllocator, sizeof(int)); 1.307 + auto list = cxArrayListCreate(cxDefaultAllocator, cx_cmp_int, CX_STORE_POINTERS, 4); 1.308 + list->destructor_data = &testingAllocator; 1.309 + list->advanced_destructor = (cx_destructor_func2) cxFree; 1.310 + cxListAdd(list, item); 1.311 + ASSERT_FALSE(testingAllocator.verify()); 1.312 + cxListDestroy(list); 1.313 + EXPECT_TRUE(testingAllocator.verify()); 1.314 +} 1.315 +