tests/test_list.cpp

changeset 677
b09aae58bba4
parent 672
55d8fdd38ca4
child 679
022fbd4bc057
     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, &notinlist));
   1.147 +        EXPECT_EQ(cxListSize(list), cxListFind(list, &notinlist));
   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);

mercurial