2014-06-16 20:55:54 +00:00
|
|
|
#include "CppUTest/TestHarness.h"
|
|
|
|
#include "CppUTest/CommandLineTestRunner.h"
|
2015-10-15 14:33:34 +00:00
|
|
|
#include "linked_list.h"
|
2014-06-16 20:55:54 +00:00
|
|
|
|
|
|
|
linked_list_t testList;
|
|
|
|
linked_item_t itemA;
|
|
|
|
linked_item_t itemB;
|
|
|
|
linked_item_t itemC;
|
|
|
|
linked_item_t itemD;
|
|
|
|
|
|
|
|
TEST_GROUP(LinkedList){
|
2015-05-13 08:30:46 +00:00
|
|
|
void setup(void){
|
2014-06-16 20:55:54 +00:00
|
|
|
testList = NULL;
|
|
|
|
linked_list_add(&testList, &itemD);
|
|
|
|
linked_list_add(&testList, &itemC);
|
|
|
|
linked_list_add(&testList, &itemB);
|
|
|
|
linked_list_add(&testList, &itemA);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
TEST(LinkedList, Iterator){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemA);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveFirstUsingIterator){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemA);
|
|
|
|
linked_list_iterator_remove(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveFirstUsingListRemove){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemA);
|
|
|
|
linked_list_remove(&testList, &itemA);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveSecondUsingIterator){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
linked_list_iterator_remove(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveSecondUsingListRemove){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
linked_list_remove(&testList, &itemB);
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveThirdUsingIterator){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
linked_list_iterator_remove(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveLastUsingIterator){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
linked_list_iterator_remove(&it);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveLastUsingListRemove){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
linked_list_remove(&testList, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveSecondAndThirdUsingIterator){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
linked_list_iterator_remove(&it); // B
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemC);
|
|
|
|
linked_list_iterator_remove(&it); // C
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(LinkedList, RemoveSecondAndThirdUsingListRemove){
|
|
|
|
linked_list_iterator_t it;
|
|
|
|
linked_list_iterator_init(&it, &testList);
|
|
|
|
linked_item_t * item;
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemB);
|
|
|
|
linked_list_remove(&testList, &itemB);
|
|
|
|
linked_list_remove(&testList, &itemC);
|
|
|
|
CHECK(linked_list_iterator_has_next(&it));
|
|
|
|
item = linked_list_iterator_next(&it);
|
|
|
|
CHECK_EQUAL(item, &itemD);
|
|
|
|
CHECK(!linked_list_iterator_has_next(&it));
|
|
|
|
}
|
|
|
|
|
|
|
|
int main (int argc, const char * argv[]){
|
|
|
|
return CommandLineTestRunner::RunAllTests(argc, argv);
|
|
|
|
}
|