test/test_list.cpp

changeset 528
4fbfac557df8
parent 521
e5dc54131d55
child 552
4373c2a90066
     1.1 --- a/test/test_list.cpp	Mon Apr 18 16:56:29 2022 +0200
     1.2 +++ b/test/test_list.cpp	Mon Apr 18 17:26:21 2022 +0200
     1.3 @@ -92,7 +92,10 @@
     1.4  }
     1.5  
     1.6  template<typename InputIter>
     1.7 -static node_test_data create_nodes_test_data(InputIter begin, InputIter end) {
     1.8 +static node_test_data create_nodes_test_data(
     1.9 +        InputIter begin,
    1.10 +        InputIter end
    1.11 +) {
    1.12      if (begin == end) return node_test_data{nullptr};
    1.13      node *first = new node;
    1.14      first->data = *begin;
    1.15 @@ -592,13 +595,17 @@
    1.16      }
    1.17  
    1.18      void verifyCreate(CxList *list) const {
    1.19 +        EXPECT_EQ(list->content_destructor_type, CX_DESTRUCTOR_NONE);
    1.20          EXPECT_EQ(list->size, 0);
    1.21          EXPECT_EQ(list->capacity, (size_t) -1);
    1.22          EXPECT_EQ(list->allocator, &testingAllocator);
    1.23          EXPECT_EQ(list->cmpfunc, cmp_int);
    1.24      }
    1.25  
    1.26 -    void verifyAdd(CxList *list, bool write_through) {
    1.27 +    void verifyAdd(
    1.28 +            CxList *list,
    1.29 +            bool write_through
    1.30 +    ) {
    1.31          auto len = testdata_len;
    1.32          cx_for_n (i, len) EXPECT_EQ(cxListAdd(list, &testdata.data[i]), 0);
    1.33          EXPECT_EQ(list->size, len);
    1.34 @@ -741,7 +748,10 @@
    1.35          }
    1.36      }
    1.37  
    1.38 -    static void verifyCompare(CxList *left, CxList *right) {
    1.39 +    static void verifyCompare(
    1.40 +            CxList *left,
    1.41 +            CxList *right
    1.42 +    ) {
    1.43          EXPECT_EQ(cxListCompare(left, right), 0);
    1.44          int x = 42;
    1.45          cxListAdd(left, &x);
    1.46 @@ -757,7 +767,7 @@
    1.47          ASSERT_EQ(left->size, right->size);
    1.48          EXPECT_LT(cxListCompare(left, right), 0);
    1.49          EXPECT_GT(cxListCompare(right, left), 0);
    1.50 -        *(int*)cxListAt(left, 15) = 10;
    1.51 +        *(int *) cxListAt(left, 15) = 10;
    1.52          EXPECT_EQ(cxListCompare(left, right), 0);
    1.53      }
    1.54  };
    1.55 @@ -879,3 +889,35 @@
    1.56      verifyCompare(left, right);
    1.57  }
    1.58  
    1.59 +TEST_F(PointerLinkedList, NoDestructor) {
    1.60 +    void *item = cxMalloc(&testingAllocator, sizeof(int));
    1.61 +    auto list = cxPointerLinkedListCreate(cxDefaultAllocator, cmp_int);
    1.62 +    cxListAdd(list, item);
    1.63 +    ASSERT_FALSE(testingAllocator.verify());
    1.64 +    cxListDestroy(list);
    1.65 +    EXPECT_FALSE(testingAllocator.verify());
    1.66 +    cxFree(&testingAllocator, item);
    1.67 +    EXPECT_TRUE(testingAllocator.verify());
    1.68 +}
    1.69 +
    1.70 +TEST_F(PointerLinkedList, SimpleDestructor) {
    1.71 +    int item = 0;
    1.72 +    auto list = cxPointerLinkedListCreate(cxDefaultAllocator, cmp_int);
    1.73 +    list->content_destructor_type = CX_DESTRUCTOR_SIMPLE;
    1.74 +    list->simple_destructor = [](void *elem) { *(int *) elem = 42; };
    1.75 +    cxListAdd(list, &item);
    1.76 +    cxListDestroy(list);
    1.77 +    EXPECT_EQ(item, 42);
    1.78 +}
    1.79 +
    1.80 +TEST_F(PointerLinkedList, AdvancedDestructor) {
    1.81 +    void *item = cxMalloc(&testingAllocator, sizeof(int));
    1.82 +    auto list = cxPointerLinkedListCreate(cxDefaultAllocator, cmp_int);
    1.83 +    list->content_destructor_type = CX_DESTRUCTOR_ADVANCED;
    1.84 +    list->advanced_destructor.data = &testingAllocator;
    1.85 +    list->advanced_destructor.func = (cx_destructor_func2) cxFree;
    1.86 +    cxListAdd(list, item);
    1.87 +    ASSERT_FALSE(testingAllocator.verify());
    1.88 +    cxListDestroy(list);
    1.89 +    EXPECT_TRUE(testingAllocator.verify());
    1.90 +}

mercurial