add pointer array list tests

Sun, 09 Apr 2023 19:37:00 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 09 Apr 2023 19:37:00 +0200
changeset 679
022fbd4bc057
parent 678
78f943d76f50
child 680
19379743e5a0

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 +

mercurial