test/test_list.cpp

changeset 647
2e6e9d9f2159
parent 641
d402fead3386
     1.1 --- a/test/test_list.cpp	Wed Feb 08 18:56:58 2023 +0100
     1.2 +++ b/test/test_list.cpp	Wed Feb 08 20:26:09 2023 +0100
     1.3 @@ -697,6 +697,54 @@
     1.4          EXPECT_NE(cxListRemove(list, testdata_len), 0);
     1.5      }
     1.6  
     1.7 +    static void verifySwap(CxList *list) {
     1.8 +        ASSERT_EQ(list->size, 0);
     1.9 +
    1.10 +        int original[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
    1.11 +        int swapped[16] = {8, 4, 14, 3, 1, 5, 9, 12, 0, 6, 11, 10, 7, 15, 2, 13};
    1.12 +
    1.13 +        // we have to add the items one by one, because it could be a pointer list
    1.14 +        cx_for_n(i, 16) {
    1.15 +            cxListAdd(list, &original[i]);
    1.16 +        }
    1.17 +
    1.18 +        int result;
    1.19 +
    1.20 +        // execute the test two times with different item sizes
    1.21 +        result = cxListSwap(list, 1, 4);
    1.22 +        EXPECT_EQ(0, result);
    1.23 +        result = cxListSwap(list, 2, 14);
    1.24 +        EXPECT_EQ(0, result);
    1.25 +        result = cxListSwap(list, 9, 6);
    1.26 +        EXPECT_EQ(0, result);
    1.27 +        result = cxListSwap(list, 3, 3);
    1.28 +        EXPECT_EQ(0, result);
    1.29 +        result = cxListSwap(list, 10, 11);
    1.30 +        EXPECT_EQ(0, result);
    1.31 +        result = cxListSwap(list, 8, 0);
    1.32 +        EXPECT_EQ(0, result);
    1.33 +        result = cxListSwap(list, 7, 12);
    1.34 +        EXPECT_EQ(0, result);
    1.35 +        result = cxListSwap(list, 13, 15);
    1.36 +        EXPECT_EQ(0, result);
    1.37 +
    1.38 +        result = cxListSwap(list, 5, 16);
    1.39 +        EXPECT_NE(0, result);
    1.40 +        result = cxListSwap(list, 16, 6);
    1.41 +        EXPECT_NE(0, result);
    1.42 +        result = cxListSwap(list, 16, 17);
    1.43 +        EXPECT_NE(0, result);
    1.44 +
    1.45 +        auto iter = cxListBegin(list);
    1.46 +        cx_foreach(int*, e, iter) {
    1.47 +            EXPECT_EQ(*e, swapped[iter.index]);
    1.48 +        }
    1.49 +        // TODO: replace with backward iterator
    1.50 +        cx_for_n(i, 16) {
    1.51 +            EXPECT_EQ(*((int *) cxListAt(list, i)), swapped[i]);
    1.52 +        }
    1.53 +    }
    1.54 +
    1.55      void verifyAt(CxList *list) const {
    1.56          auto len = testdata_len;
    1.57          EXPECT_EQ(list->size, len);
    1.58 @@ -903,6 +951,40 @@
    1.59      verifyRemove(arrayListFromTestData());
    1.60  }
    1.61  
    1.62 +TEST_F(LinkedList, cxListSwap) {
    1.63 +    verifySwap(autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int))));
    1.64 +}
    1.65 +
    1.66 +TEST_F(PointerLinkedList, cxListSwap) {
    1.67 +    auto list = autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int *)));
    1.68 +    cxListStorePointers(list);
    1.69 +    verifySwap(list);
    1.70 +}
    1.71 +
    1.72 +TEST_F(ArrayList, cxListSwap) {
    1.73 +    verifySwap(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 16)));
    1.74 +}
    1.75 +
    1.76 +TEST_F(LinkedList, cxListSwapNoSBO) {
    1.77 +    CX_DISABLE_LINKED_LIST_SWAP_SBO = true;
    1.78 +    verifySwap(autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int))));
    1.79 +    CX_DISABLE_LINKED_LIST_SWAP_SBO = false;
    1.80 +}
    1.81 +
    1.82 +TEST_F(PointerLinkedList, cxListSwapNoSBO) {
    1.83 +    auto list = autofree(cxLinkedListCreate(&testingAllocator, cx_cmp_int, sizeof(int *)));
    1.84 +    cxListStorePointers(list);
    1.85 +    CX_DISABLE_LINKED_LIST_SWAP_SBO = true;
    1.86 +    verifySwap(list);
    1.87 +    CX_DISABLE_LINKED_LIST_SWAP_SBO = false;
    1.88 +}
    1.89 +
    1.90 +TEST_F(ArrayList, cxListSwapNoSBO) {
    1.91 +    CX_DISABLE_LINKED_LIST_SWAP_SBO = true;
    1.92 +    verifySwap(autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 16)));
    1.93 +    CX_DISABLE_LINKED_LIST_SWAP_SBO = false;
    1.94 +}
    1.95 +
    1.96  TEST_F(LinkedList, cxListAt) {
    1.97      verifyAt(linkedListFromTestData());
    1.98  }

mercurial