blob: 2eb9e69c8117a831647922b43282aa642283a88b [file] [log] [blame]
/* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <gtest/gtest.h>
#include "capu/container/List.h"
#include "capu/Error.h"
#include "capu/Config.h"
TEST(List, Constructor_Default) {
//create an empty linked list
capu::List<capu::int32_t*>* list = NULL;
list = new capu::List<capu::int32_t*>();
EXPECT_TRUE(list != NULL);
delete list;
}
TEST(List, addTest) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 0;
capu::status_t result;
//append element to the linked list
result = list->add(data1);
EXPECT_TRUE(result == capu::CAPU_OK);
//append another element to linked list
result = list->add(data2);
EXPECT_TRUE(result == capu::CAPU_OK);
//Get added elements to compare that if they are correctly added or not
list->get(0, &data3);
EXPECT_TRUE(data3 == data1);
list->get(1, &data3);
EXPECT_TRUE(data3 == data2);
delete list;
}
TEST(List, addIndexTest) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 0;
capu::status_t result;
result = list->add(10, data1);
EXPECT_TRUE(result == capu::CAPU_EINVAL);
result = list->add(0, data2);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(1, data2);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(0, data2);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(1, data1);
EXPECT_TRUE(result == capu::CAPU_OK);
//Get added elements to compare that if they are correctly added or not
list->get(0, &data3);
EXPECT_TRUE(data3 == data2);
list->get(1, &data3);
EXPECT_TRUE(data3 == data1);
delete list;
}
TEST(List, removeAt) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 56;
capu::status_t result;
data1 = 32;
data2 = 43;
data3 = 56;
//add some elements to linked list
result = list->add(data1);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(data3);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(data2);
EXPECT_TRUE(result == capu::CAPU_OK);
//removing element at index 1
result = list->removeAt(1);
EXPECT_TRUE(result == capu::CAPU_OK);
//removing element at index 1
result = list->removeAt(1);
EXPECT_TRUE(result == capu::CAPU_OK);
//removing element at index 0 (HEAD)
result = list->removeAt(0, &data1);
EXPECT_TRUE(result == capu::CAPU_OK);
EXPECT_TRUE(data1 == 32);
//remove element from out of index
result = list->removeAt(1000);
EXPECT_TRUE(result == capu::CAPU_EINVAL);
//check size of list
EXPECT_TRUE(list->size() == 0);
delete list;
}
TEST(List, getElementInConstList) {
capu::List<capu::int32_t>* normalList = new capu::List<capu::int32_t > ();
const capu::List<capu::int32_t>* constantList = normalList;
capu::int32_t data1;
capu::status_t result;
data1 = 32;
result = normalList->add(data1);
EXPECT_TRUE(result == capu::CAPU_OK);
result = constantList->get(0, &data1);
EXPECT_TRUE(result == capu::CAPU_OK);
delete normalList;
}
TEST(List, loopThroughConstList) {
capu::List<capu::int32_t>* normalList = new capu::List<capu::int32_t > ();
const capu::List<capu::int32_t>* constantList = normalList;
capu::int32_t data1;
capu::status_t result;
data1 = 32;
result = normalList->add(data1);
EXPECT_TRUE(result == capu::CAPU_OK);
capu::List<capu::int32_t>::Iterator iterator = constantList->begin();
while (iterator.hasNext())
{
capu::int32_t* temp=0;;
iterator.next(temp);
}
delete normalList;
}
TEST(List, get) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 56;
capu::int32_t data4 = 0;
capu::status_t result;
//add some element to the linked list
result = list->add(data1);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(data3);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(data2);
EXPECT_TRUE(result == capu::CAPU_OK);
//get the added elements by using its index and compare the values with inserted elements
result = list->get(0, &data4);
EXPECT_TRUE(result == capu::CAPU_OK);
EXPECT_TRUE(data1 == data4);
result = list->get(1, &data4);
EXPECT_TRUE(result == capu::CAPU_OK);
EXPECT_TRUE(data3 == data4);
result = list->get(2, &data4);
EXPECT_TRUE(result == capu::CAPU_OK);
EXPECT_TRUE(data2 == data4);
result = list->get(123, NULL);
EXPECT_TRUE(result == capu::CAPU_EINVAL);
delete list;
}
TEST(List, size) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int_t result;
capu::int32_t data1 = 32;;
//size of empty list
result = list->size();
EXPECT_TRUE(result == 0);
//add some elements and check the size for each step
list->add(data1);
result = list->size();
EXPECT_TRUE(result == 1);
list->add(data1);
result = list->size();
EXPECT_TRUE(result == 2);
list->add(data1);
result = list->size();
EXPECT_TRUE(result == 3);
list->removeAt(0);
result = list->size();
EXPECT_TRUE(result == 2);
list->removeAt(1);
result = list->size();
EXPECT_TRUE(result == 1);
delete list;
}
TEST(List, empty) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 44;
capu::bool_t result;
//check the empty list
result = list->isEmpty();
EXPECT_TRUE(result == true);
//add some element
list->add(data1);
result = list->isEmpty();
EXPECT_TRUE(result == false);
delete list;
}
TEST(List, find) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 44;
capu::int_t result;
//check empty list
result = list->find(data1);
EXPECT_TRUE(result == -1);
//add some elements
list->add(data1);
list->add(data2);
list->add(data3);
//find the elements
result = list->find(data1);
EXPECT_TRUE(result == 0);
result = list->find(data2);
EXPECT_TRUE(result == 1);
result = list->find(data3);
EXPECT_TRUE(result == 2);
delete list;
}
TEST(List, contains) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 44;
capu::int32_t check_value = 0;
capu::bool_t result;
data1 = 32;
data2 = 43;
data3 = 44;
//check empty list
result = list->contains(check_value);
EXPECT_TRUE(result == false);
// fill the linke
list->add(data1);
list->add(data1);
list->add(data2);
list->add(data3);
//check an elements to be contained by linked list or not
result = list->contains(check_value);
EXPECT_TRUE(result == false);
result = list->contains(data3);
EXPECT_TRUE(result == true);
delete list;
}
TEST(List, copyConstructor1) {
capu::List<capu::int32_t> list;
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 44;
//add some dummy values to the linked list
list.add(data1);
list.add(data2);
list.add(data3);
capu::List<capu::int32_t> copy(list);
EXPECT_EQ(list.size(), copy.size());
list.clear();
EXPECT_EQ(0, copy.find(data1));
EXPECT_EQ(1, copy.find(data2));
EXPECT_EQ(2, copy.find(data3));
}
TEST(List, copyConstructor2) {
// copy empty list and add values afterwards to original list
capu::List<capu::int32_t> list;
capu::List<capu::int32_t> copy(list);
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 44;
copy.add(data1);
copy.add(data2);
copy.add(data3);
EXPECT_EQ(0, copy.find(data1));
EXPECT_EQ(1, copy.find(data2));
EXPECT_EQ(2, copy.find(data3));
EXPECT_TRUE(list.isEmpty());
}
TEST(List, clear) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 44;
capu::status_t result;
//add some dummy values to the linked list
list->add(data1);
list->add(data1);
list->add(data2);
list->add(data3);
//remove all elements from the linked list
result = list->clear();
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->add(data1);
EXPECT_TRUE(result == capu::CAPU_OK);
result = list->get(0, &data2);
EXPECT_TRUE(data1 == data2);
delete list;
}
TEST(List, set) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
EXPECT_TRUE(list->add(data1) == capu::CAPU_OK);
EXPECT_TRUE(list->add(data2) == capu::CAPU_OK);
EXPECT_TRUE(list->set(1, data1) == capu::CAPU_OK);
EXPECT_TRUE(list->set(0, data1) == capu::CAPU_OK);
EXPECT_TRUE(list->get(1, &data2) == capu::CAPU_OK);
EXPECT_TRUE(list->set(2, data1) == capu::CAPU_EINVAL);
EXPECT_TRUE(data2 == data1);
delete list;
}
TEST(ListIterator, hasNext) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::List<capu::int32_t>::Iterator it = list->begin();
EXPECT_TRUE(it.hasNext() == false);
list->add(data1);
list->add(data2);
it = list->begin();
capu::bool_t resultb = it.hasNext();
EXPECT_TRUE(resultb == true);
delete list;
}
TEST(ListIterator, next) {
capu::List<capu::int32_t>* list = new capu::List<capu::int32_t > ();
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 0;
capu::List<capu::int32_t>::Iterator it = list->begin();
capu::int32_t cnt = 0;
EXPECT_TRUE(it.hasNext() == false);
list->add(data1);
list->add(data2);
it = list->begin();
while (it.hasNext()) {
it.next(&data3);
if (cnt == 0)
EXPECT_TRUE(data3 == data1);
else
EXPECT_TRUE(data3 == data2);
cnt++;
}
delete list;
}
TEST(ListIterator, current){
capu::List<capu::int32_t> list;
capu::int32_t data1 = 0;
capu::List<capu::int32_t>::Iterator it = list.begin();
EXPECT_TRUE(it.current(&data1) == capu::CAPU_ERANGE);
list.add(1);
it = list.begin();
EXPECT_TRUE(it.current(&data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 1);
list.add(2);
list.add(3);
data1 = 0;
capu::int32_t index = 1;
for(it = list.begin(); it.hasNext(); it.next())
{
EXPECT_TRUE(it.current(&data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == index);
++index;
}
}
TEST(ListIterator, removeAt){
capu::List<capu::int32_t> list;
capu::int32_t data1 = 0;
capu::List<capu::int32_t>::Iterator it = list.begin();
EXPECT_TRUE(list.removeAt(it) == capu::CAPU_EINVAL);
list.add(1);
it = list.begin();
EXPECT_TRUE(list.removeAt(it, &data1) == capu::CAPU_OK);
EXPECT_TRUE(list.size() == 0);
EXPECT_TRUE(data1 == 1);
list.add(1);
list.add(2);
list.add(3);
it = list.begin();
it.next();
list.removeAt(it, &data1);
EXPECT_TRUE(data1 == 2);
capu::int32_t index = 1;
for(it = list.begin(); it.hasNext();)
{
it.next(&data1);
EXPECT_TRUE(data1 == index);
index += 2;
}
list.add(1,2);
index = 1;
it = list.begin();
it.current(&data1);
while(it.hasNext())
{
list.removeAt(it, &data1);
EXPECT_TRUE(data1 == index);
++index;
}
}
TEST(ListIterator, add){
capu::List<capu::int32_t> list;
capu::List<capu::int32_t>::Iterator iter = list.begin();
capu::int32_t data1 = 0;
list.add(iter, 1);
list.add(iter, 2);
list.add(iter, 3);
EXPECT_TRUE(list.get(0, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 1);
EXPECT_TRUE(list.get(1, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 2);
EXPECT_TRUE(list.get(2, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 3);
iter = list.begin();
iter.next();
list.add(iter, 4);
EXPECT_TRUE(list.get(0, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 1);
EXPECT_TRUE(list.get(1, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 4);
EXPECT_TRUE(list.get(2, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 2);
EXPECT_TRUE(list.get(3, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 3);
iter.next();
iter.next();
list.add(iter, 5);
EXPECT_TRUE(list.get(0, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 1);
EXPECT_TRUE(list.get(1, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 4);
EXPECT_TRUE(list.get(2, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 2);
EXPECT_TRUE(list.get(3, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 3);
EXPECT_TRUE(list.get(4, &data1) == capu::CAPU_OK);
EXPECT_TRUE(data1 == 5);
iter = list.begin();
list.add(iter, 6);
EXPECT_TRUE(list.get(0, &data1) == capu::CAPU_OK);
EXPECT_EQ(6, data1);
EXPECT_TRUE(list.get(1, &data1) == capu::CAPU_OK);
EXPECT_EQ(1, data1);
EXPECT_TRUE(list.get(2, &data1) == capu::CAPU_OK);
EXPECT_EQ(4, data1);
EXPECT_TRUE(list.get(3, &data1) == capu::CAPU_OK);
EXPECT_EQ(2, data1);
EXPECT_TRUE(list.get(4, &data1) == capu::CAPU_OK);
EXPECT_EQ(3, data1);
EXPECT_TRUE(list.get(5, &data1) == capu::CAPU_OK);
EXPECT_EQ(5, data1);
}
TEST(ListIterator, currentIndex){
capu::List<capu::int32_t> list;
capu::int32_t data1 = 32;
capu::int32_t data2 = 43;
capu::int32_t data3 = 44;
//add some dummy values to the linked list
list.add(data1);
list.add(data2);
list.add(data3);
capu::List<capu::int32_t>::Iterator iter = list.begin();
EXPECT_EQ(0u, iter.currentIndex());
iter.next();
EXPECT_EQ(1u, iter.currentIndex());
iter.next();
EXPECT_EQ(2u, iter.currentIndex());
}
TEST(ListIterator, loopAdd){
capu::List<capu::int32_t> list;
capu::List<capu::int32_t>::Iterator iter = list.begin();
capu::int32_t data1 = 0;
list.add(iter, 1);
iter = list.begin();
while(iter.hasNext())
{
iter.next(&data1);
}
list.add(iter, 2);
EXPECT_TRUE(list.get(0, &data1) == capu::CAPU_OK);
EXPECT_EQ(1, data1);
EXPECT_TRUE(list.get(1, &data1) == capu::CAPU_OK);
EXPECT_EQ(2, data1);
list.add(iter, 3);
iter = list.begin();
capu::int32_t i = 1;
while(i <= 3)
{
EXPECT_TRUE(iter.current(&data1) == capu::CAPU_OK);
EXPECT_EQ(i, data1);
iter.next();
i++;
}
}