Exemplo n.º 1
0
void TestReverse()
{
    List* list = ListInit();

    /* Prepare the initial elements. */
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)1) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)2) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)3) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)4) == true);

    list->reverse(list);

    /* Check the reversed element sequence. */
    void* element;
    CU_ASSERT(list->get_at(list, 0, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
    CU_ASSERT(list->get_at(list, 1, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
    CU_ASSERT(list->get_at(list, 2, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_at(list, 3, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);

    ListDeinit(list);
}
Exemplo n.º 2
0
void TestInsert()
{
    List* list = ListInit();

    /* Insert elements to the specified indexes. */
    CU_ASSERT(list->insert(list, 1, (void*)(intptr_t)1) == false);

    CU_ASSERT(list->insert(list, 0, (void*)(intptr_t)1) == true);
    CU_ASSERT(list->insert(list, 1, (void*)(intptr_t)4) == true);
    CU_ASSERT(list->insert(list, 1, (void*)(intptr_t)2) == true);
    CU_ASSERT(list->insert(list, 2, (void*)(intptr_t)3) == true);
    CU_ASSERT(list->insert(list, 0, (void*)(intptr_t)0) == true);

    /* Check element insertion sequence. */
    void* element;
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)0);
    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

    CU_ASSERT(list->get_at(list, 0, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)0);
    CU_ASSERT(list->get_at(list, 1, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
    CU_ASSERT(list->get_at(list, 2, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_at(list, 3, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
    CU_ASSERT(list->get_at(list, 4, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

    CU_ASSERT_EQUAL(list->size(list), 5);
    ListDeinit(list);
}
Exemplo n.º 3
0
void TestIterator()
{
    List* list = ListInit();

    /* Prepare the initial elements. */
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)1) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)2) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)3) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)4) == true);

    /* Iterate through the list. */
    void* element;
    int check = 1;

    list->first(list, false);
    while (list->next(list, &element)) {
        CU_ASSERT_EQUAL((int)(intptr_t)element, check);
        ++check;
    }

    /* Iterate through the list in reversed order. */
    check = 4;
    list->first(list, true);
    while (list->reverse_next(list, &element)) {
        CU_ASSERT_EQUAL((int)(intptr_t)element, check);
        --check;
    }

    ListDeinit(list);
}
Exemplo n.º 4
0
/*-----------------------------------------------------------------------------*
 *              Unit tests relevant to complex data maintenance                *
 *-----------------------------------------------------------------------------*/
void TestObjectInsert()
{
    char* nums[SIZE_MID_TEST];
    char buf[SIZE_TXT_BUFF];
    int idx = 0;
    while (idx < SIZE_MID_TEST) {
        snprintf(buf, SIZE_TXT_BUFF, "%d", idx);
        nums[idx] = strdup((const char*)buf);
        ++idx;
    }

    List* list = ListInit();
    list->set_clean(list, CleanElement);

    /* Push the elements ranging from 1536 to 2047 to the list tail. */
    idx = SIZE_MID_TEST - SIZE_SML_TEST;
    while (idx < SIZE_MID_TEST) {
        CU_ASSERT(list->push_back(list, strdup(nums[idx])) == true);
        ++idx;
    }

    /* Push the elements ranging from 0 to 511 to the list head. */
    idx = SIZE_SML_TEST - 1;
    while (idx >= 0) {
        CU_ASSERT(list->push_front(list, strdup(nums[idx])) == true);
        --idx;
    }

    /* Insert the elements ranging from 512 to 1535. */
    idx = SIZE_SML_TEST;
    int bnd = SIZE_MID_TEST - SIZE_SML_TEST;
    while (idx < bnd) {
        CU_ASSERT(list->insert(list, idx, strdup(nums[idx])) == true);
        ++idx;
    }

    /* Check the element sequence. */
    void* element;
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT(strcmp((char*)element, nums[0]) == 0);

    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT(strcmp((char*)element, nums[SIZE_MID_TEST - 1]) == 0);

    idx = 0;
    while (idx < SIZE_MID_TEST) {
        CU_ASSERT(list->get_at(list, idx, &element) == true);
        CU_ASSERT(strcmp((char*)element, nums[idx]) == 0);
        ++idx;
    }

    ListDeinit(list);

    idx = 0;
    while (idx < SIZE_MID_TEST) {
        free(nums[idx]);
        ++idx;
    }
}
Exemplo n.º 5
0
/*-----------------------------------------------------------------------------*
 *            Unit tests relevant to basic structure verification              *
 *-----------------------------------------------------------------------------*/
void TestNewDelete()
{
    List* list;
    CU_ASSERT((list = ListInit()) != NULL);

    /* Enlarge the list size to test the destructor. */
    unsigned i;
    for (i = 0 ; i < SIZE_SML_TEST ; ++i)
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)i) == true);

    ListDeinit(list);
}
Exemplo n.º 6
0
void TestObjectReplace()
{
    char* nums[SIZE_SML_TEST];
    char buf[SIZE_TXT_BUFF];
    int idx = 0;
    while (idx < SIZE_SML_TEST) {
        snprintf(buf, SIZE_TXT_BUFF, "%d", idx);
        nums[idx] = strdup((const char*)buf);
        ++idx;
    }

    List* list = ListInit();
    list->set_clean(list, CleanElement);

    /* Push the elements ranging from 0 to 511. */
    idx = 0;
    while (idx < SIZE_SML_TEST) {
        CU_ASSERT(list->push_back(list, strdup(nums[idx])) == true);
        ++idx;
    }

    /* Reverse the list via element replacement. */
    CU_ASSERT(list->set_front(list, strdup(nums[SIZE_SML_TEST - 1])) == true);
    CU_ASSERT(list->set_back(list, strdup((nums[0]))) == true);
    idx = 1;
    while (idx < SIZE_SML_TEST - 1) {
        CU_ASSERT(list->set_at(list, idx, strdup(nums[SIZE_SML_TEST - 1 - idx])) == true);
        ++idx;
    }

    /* Check the element sequence. */
    void* element;
    idx = 0;
    while (idx < SIZE_SML_TEST) {
        CU_ASSERT(list->get_at(list, idx, &element) == true);
        CU_ASSERT(strcmp((char*)element, nums[SIZE_SML_TEST - 1 - idx]) == 0);
        ++idx;
    }

    ListDeinit(list);

    idx = 0;
    while (idx < SIZE_SML_TEST) {
        free(nums[idx]);
        ++idx;
    }
}
Exemplo n.º 7
0
void TestReplace()
{
    List* list = ListInit();

    CU_ASSERT(list->set_front(list, (void*)(intptr_t)0) == false);
    CU_ASSERT(list->set_back(list, (void*)(intptr_t)0) == false);
    CU_ASSERT(list->set_at(list, 0, (void*)(intptr_t)0) == false);

    /* Prepare the initial elements. */
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)1) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)2) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)3) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)4) == true);

    /* Replace the element residing at the list head and check the result. */
    void* element;
    CU_ASSERT(list->set_front(list, (void*)(intptr_t)-1) == true);
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)-1);

    /* Replace the element residing at the list tail and check the result. */
    CU_ASSERT(list->set_back(list, (void*)(intptr_t)-3) == true);
    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)-3);

    /* Replace the elements residing at the specified indexes and check the result. */
    CU_ASSERT(list->set_at(list, 0, (void*)(intptr_t)10) == true);
    CU_ASSERT(list->get_at(list, 0, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)10);

    CU_ASSERT(list->set_at(list, 1, (void*)(intptr_t)20) == true);
    CU_ASSERT(list->get_at(list, 1, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)20);

    CU_ASSERT(list->set_at(list, 2, (void*)(intptr_t)30) == true);
    CU_ASSERT(list->get_at(list, 2, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)30);

    CU_ASSERT(list->set_at(list, 3, (void*)(intptr_t)40) == true);
    CU_ASSERT(list->get_at(list, 3, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)40);

    CU_ASSERT(list->set_at(list, 4, (void*)(intptr_t)0) == false);

    ListDeinit(list);
}
Exemplo n.º 8
0
void TestObjectRemove()
{
    char* nums[SIZE_MID_TEST];
    char buf[SIZE_TXT_BUFF];
    int idx = 0;
    while (idx < SIZE_MID_TEST) {
        snprintf(buf, SIZE_TXT_BUFF, "%d", idx);
        nums[idx] = strdup((const char*)buf);
        ++idx;
    }

    List* list = ListInit();
    list->set_clean(list, CleanElement);

    /* Push the elements ranging from 0 to 2047. */
    idx = 0;
    while (idx < SIZE_MID_TEST) {
        CU_ASSERT(list->push_back(list, strdup(nums[idx])) == true);
        ++idx;
    }

    /* Pop the elements ranging from 0 to 511 at the list head. */
    idx = 0;
    while (idx < SIZE_SML_TEST) {
        CU_ASSERT(list->pop_front(list) == true);
        ++idx;
    }

    /* Pop the elements ranging from 1536 to 2047 at the list tail. */
    idx = 0;
    while (idx < SIZE_SML_TEST) {
        CU_ASSERT(list->pop_back(list) == true);
        ++idx;
    }

    /* Remove the elements ranging from 1024 to 1535. */
    idx = 0;
    while (idx < SIZE_SML_TEST) {
        CU_ASSERT(list->remove(list, SIZE_SML_TEST) == true);
        ++idx;
    }

    /* Check the element sequence. */
    void* element;
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT(strcmp((char*)element, nums[SIZE_SML_TEST]) == 0);

    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT(strcmp((char*)element, nums[(SIZE_SML_TEST << 1) - 1]) == 0);

    idx = 0;
    while (idx < SIZE_SML_TEST) {
        CU_ASSERT(list->get_at(list, idx, &element) == true);
        CU_ASSERT(strcmp((char*)element, nums[idx + SIZE_SML_TEST]) == 0);
        ++idx;
    }

    ListDeinit(list);

    idx = 0;
    while (idx < SIZE_MID_TEST) {
        free(nums[idx]);
        ++idx;
    }
}
Exemplo n.º 9
0
void TestPushFrontAndBack()
{
    {
        List* list = ListInit();

        void* element;
        CU_ASSERT(list->get_front(list, &element) == false);
        CU_ASSERT(list->get_back(list, &element) == false);
        CU_ASSERT(list->get_at(list, 0, &element) == false);

        /* Push elements to the list head. */
        CU_ASSERT(list->push_front(list, (void*)(intptr_t)4) == true);
        CU_ASSERT(list->push_front(list, (void*)(intptr_t)3) == true);
        CU_ASSERT(list->push_front(list, (void*)(intptr_t)2) == true);
        CU_ASSERT(list->push_front(list, (void*)(intptr_t)1) == true);

        /* Check element insertion sequence. */
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_at(list, 1, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
        CU_ASSERT(list->get_at(list, 2, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
        CU_ASSERT(list->get_at(list, 3, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

        CU_ASSERT_EQUAL(list->size(list), 4);
        ListDeinit(list);
    }
    {
        List* list = ListInit();

        /* Push elements to the list tail. */
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)1) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)2) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)3) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)4) == true);

        void* element;
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_at(list, 1, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
        CU_ASSERT(list->get_at(list, 2, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
        CU_ASSERT(list->get_at(list, 3, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

        CU_ASSERT_EQUAL(list->size(list), 4);
        ListDeinit(list);
    }
}
Exemplo n.º 10
0
void TestRemove()
{
    List* list = ListInit();

    /* Prepare the initial elements. */
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)1) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)2) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)3) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)4) == true);
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)5) == true);

    /* Remove elements from the specified index and check the remaining
       element sequence. */
    void* element;
    CU_ASSERT(list->remove(list, 0) == true);
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)5);
    CU_ASSERT(list->get_at(list, 0, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_at(list, 1, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
    CU_ASSERT(list->get_at(list, 2, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
    CU_ASSERT(list->get_at(list, 3, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)5);

    CU_ASSERT(list->remove(list, 1) == true);
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)5);
    CU_ASSERT(list->get_at(list, 0, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_at(list, 1, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
    CU_ASSERT(list->get_at(list, 2, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)5);

    CU_ASSERT(list->remove(list, 2) == true);
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
    CU_ASSERT(list->get_at(list, 0, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_at(list, 1, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

    CU_ASSERT(list->remove(list, 1) == true);
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
    CU_ASSERT(list->get_at(list, 0, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);

    CU_ASSERT_EQUAL(list->size(list), 1);

    CU_ASSERT(list->remove(list, 0) == true);
    CU_ASSERT(list->remove(list, 0) == false);
    CU_ASSERT(list->get_front(list, &element) == false);
    CU_ASSERT(list->get_back(list, &element) == false);
    CU_ASSERT(list->get_at(list, 0, &element) == false);

    /* Insert the element again to check if the list is well handled in
       the previous test. */
    CU_ASSERT(list->push_back(list, (void*)(intptr_t)777) == true);
    CU_ASSERT(list->get_front(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)777);
    CU_ASSERT(list->get_back(list, &element) == true);
    CU_ASSERT_EQUAL(element, (void*)(intptr_t)777);
    CU_ASSERT_EQUAL(list->size(list), 1);

    ListDeinit(list);
}
Exemplo n.º 11
0
void TestPopFrontAndBack()
{
    {
        List* list = ListInit();

        CU_ASSERT(list->pop_front(list) == false);

        /* Prepare the initial elements. */
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)1) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)2) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)3) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)4) == true);

        /* Pop elements from the list head and check the remaining element sequence. */
        void* element;
        CU_ASSERT(list->pop_front(list) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
        CU_ASSERT(list->get_at(list, 1, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
        CU_ASSERT(list->get_at(list, 2, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

        CU_ASSERT(list->pop_front(list) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
        CU_ASSERT(list->get_at(list, 1, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

        CU_ASSERT(list->pop_front(list) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);
        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)4);

        CU_ASSERT_EQUAL(list->size(list), 1);

        CU_ASSERT(list->pop_front(list) == true);
        CU_ASSERT(list->get_front(list, &element) == false);
        CU_ASSERT(list->get_back(list, &element) == false);
        CU_ASSERT(list->get_at(list, 0, &element) == false);

        CU_ASSERT(list->pop_front(list) == false);

        /* Insert the element again to check if the list is well handled in
           the previous test. */
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)777) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)777);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)777);
        CU_ASSERT_EQUAL(list->size(list), 1);

        ListDeinit(list);
    }
    {
        List* list = ListInit();

        CU_ASSERT(list->pop_back(list) == false);

        /* Prepare the initial elements. */
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)1) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)2) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)3) == true);
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)4) == true);

        /* Pop elements from the list tail and check the remaining element sequence. */
        void* element;
        CU_ASSERT(list->pop_back(list) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);
        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_at(list, 1, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
        CU_ASSERT(list->get_at(list, 2, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)3);

        CU_ASSERT(list->pop_back(list) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);
        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_at(list, 1, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)2);

        CU_ASSERT(list->pop_back(list) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);
        CU_ASSERT(list->get_at(list, 0, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)1);

        CU_ASSERT_EQUAL(list->size(list), 1);

        CU_ASSERT(list->pop_back(list) == true);
        CU_ASSERT(list->get_front(list, &element) == false);
        CU_ASSERT(list->get_back(list, &element) == false);
        CU_ASSERT(list->get_at(list, 0, &element) == false);

        CU_ASSERT(list->pop_back(list) == false);

        /* Insert the element again to check if the list is well handled in
           the previous test. */
        CU_ASSERT(list->push_back(list, (void*)(intptr_t)777) == true);
        CU_ASSERT(list->get_front(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)777);
        CU_ASSERT(list->get_back(list, &element) == true);
        CU_ASSERT_EQUAL(element, (void*)(intptr_t)777);
        CU_ASSERT_EQUAL(list->size(list), 1);

        ListDeinit(list);
    }
}
Exemplo n.º 12
0
void ManipulateNumerics()
{
    /* We should initialize the container before any operations. */
    List* list = ListInit();

    /* Push the integer elements. */
    ListPushFront(list, (void*)(intptr_t)20);
    ListPushBack(list, (void*)(intptr_t)40);

    /* Insert the elements with the specified indexes. */
    ListInsert(list, 0, (void*)(intptr_t)10);
    ListInsert(list, 3, (void*)(intptr_t)50);
    ListInsert(list, 2, (void*)(intptr_t)30);

    /*---------------------------------------------------------------*
     * Now the list should be: (10)<-->(20)<-->(30)<-->(40)<-->(50)  *
     *---------------------------------------------------------------*/

    /* Iterate through the list. */
    void* element;
    int num = 10;
    ListFirst(list, false);
    while (ListNext(list, &element)) {
        assert((int)(intptr_t)element == num);
        num += 10;
    }

    /* Iterate through the list in the reversed order. */
    num = 50;
    ListFirst(list, true);
    while (ListReverseNext(list, &element)) {
        assert((int)(intptr_t)element == num);
        num -= 10;
    }

    /* Get the element from the list head. */
    ListGetFront(list, &element);
    assert((int)(intptr_t)element == 10);

    /* Get the element from the list tail. */
    ListGetBack(list, &element);
    assert((int)(intptr_t)element == 50);

    /* Get the elements from the specified indexes. */
    ListGetAt(list, 2, &element);
    assert((int)(intptr_t)element == 30);
    ListGetAt(list, 3, &element);
    assert((int)(intptr_t)element == 40);

    /* Replace the element residing at the list head. */
    ListSetFront(list, (void*)(intptr_t)-1);

    /* Replace the element residing at the list tail. */
    ListSetBack(list, (void*)(intptr_t)-5);

    /* Replace the elements residing at the specified indexes. */
    ListSetAt(list, 1, (void*)(intptr_t)-2);
    ListSetAt(list, 2, (void*)(intptr_t)-3);
    ListSetAt(list, 3, (void*)(intptr_t)-4);

    /* Reverse the list. */
    ListReverse(list);

    /*---------------------------------------------------------------*
     * Now the list should be: (-5)<-->(-4)<-->(-3)<-->(-2)<-->(-1)  *
     *---------------------------------------------------------------*/

    /* Remove the element from the list head. */
    ListPopFront(list);

    /* Remove the element from the list tail. */
    ListPopBack(list);

    /* Remove the elements from the specified indexes. */
    ListRemove(list, 1);
    ListRemove(list, 1);

    /* Get the list size. And the remaining element should be (-4). */
    unsigned size = ListSize(list);
    assert(size == 1);

    ListGetFront(list, &element);
    assert((int)(intptr_t)element == -4);

    ListDeinit(list);
}
Exemplo n.º 13
0
void ManipulateObjects()
{
    /* We should initialize the container before any operations. */
    List* list = ListInit();
    ListSetClean(list, CleanObject);

    /* Push the object elements. */
    Tuple* tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = 20;
    tuple->second = -20;
    ListPushFront(list, tuple);

    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = 40;
    tuple->second = -40;
    ListPushBack(list, tuple);

    /* Insert the elements with the specified indexes. */
    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = 10;
    tuple->second = -10;
    ListInsert(list, 0, tuple);

    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = 50;
    tuple->second = -50;
    ListInsert(list, 3, tuple);

    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = 30;
    tuple->second = -30;
    ListInsert(list, 2, tuple);

    /*---------------------------------------------------------------*
     * Now the list should be: (10)<-->(20)<-->(30)<-->(40)<-->(50)  *
     *---------------------------------------------------------------*/

    /* Iterate through the list. */
    void* element;
    int num = 10;
    ListFirst(list, false);
    while (ListNext(list, &element)) {
        assert(((Tuple*)element)->first == num);
        num += 10;
    }

    /* Iterate through the list in the reversed order. */
    num = 50;
    ListFirst(list, true);
    while (ListReverseNext(list, &element)) {
        assert(((Tuple*)element)->first == num);
        num -= 10;
    }

    /* Get the element from the list head. */
    ListGetFront(list, &element);
    assert(((Tuple*)element)->first == 10);

    /* Get the element from the list tail. */
    ListGetBack(list, &element);
    assert(((Tuple*)element)->first == 50);

    /* Get the elements from the specified indexes. */
    ListGetAt(list, 2, &element);
    assert(((Tuple*)element)->first == 30);
    ListGetAt(list, 3, &element);
    assert(((Tuple*)element)->first == 40);

    /* Replace the element residing at the list head. */
    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = -1;
    tuple->second = 1;
    ListSetFront(list, tuple);

    /* Replace the element residing at the list tail. */
    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = -5;
    tuple->second = 5;
    ListSetBack(list, tuple);

    /* Replace the elements residing at the specified indexes. */
    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = -2;
    tuple->second = 2;
    ListSetAt(list, 1, tuple);

    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = -3;
    tuple->second = 3;
    ListSetAt(list, 2, tuple);

    tuple = (Tuple*)malloc(sizeof(Tuple));
    tuple->first = -4;
    tuple->second = 4;
    ListSetAt(list, 3, tuple);

    /* Reverse the list. */
    ListReverse(list);

    /*---------------------------------------------------------------*
     * Now the list should be: (-5)<-->(-4)<-->(-3)<-->(-2)<-->(-1)  *
     *---------------------------------------------------------------*/

    /* Remove the element from the list head. */
    ListPopFront(list);

    /* Remove the element from the list tail. */
    ListPopBack(list);

    /* Remove the elements from the specified indexes. */
    ListRemove(list, 1);
    ListRemove(list, 1);

    /* Get the list size. And the remaining element should be (-4). */
    unsigned size = ListSize(list);
    assert(size == 1);

    ListGetFront(list, &element);
    assert(((Tuple*)element)->first == -4);

    ListDeinit(list);
}