action
container
contrib
controller
coordinates
datalinklayer
datapool
defaultcfg
devicehandlers
events
fdir
globalfunctions
health
internalError
ipc
memory
modes
monitoring
objectmanager
osal
parameters
power
pus
returnvalues
rmap
serialize
serviceinterface
storagemanager
subsystem
tasks
tcdistribution
thermal
timemanager
tmstorage
tmtcpacket
tmtcservices
unittest
core
internal
testcfg
tests
action
container
RingBufferTest.cpp
TestArrayList.cpp
TestDynamicFifo.cpp
TestFifo.cpp
TestFixedArrayList.cpp
TestFixedMap.cpp
TestFixedOrderedMultimap.cpp
TestPlacementFactory.cpp
osal
serialize
storagemanager
tests.mk
testtemplate
README.md
lcov.sh
unlockRealtime.sh
.gitignore
.gitmodules
FSFWVersion.h
LICENSE
NOTICE
README.md
fsfw.mk
91 lines
2.6 KiB
C++
91 lines
2.6 KiB
C++
#include <fsfw/container/ArrayList.h>
|
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
|
#include <catch2/catch.hpp>
|
|
#include "../../core/CatchDefinitions.h"
|
|
|
|
/**
|
|
* @brief Array List test
|
|
*/
|
|
TEST_CASE("Array List" , "[ArrayListTest]") {
|
|
//perform set-up here
|
|
ArrayList<uint16_t> list(20);
|
|
struct TestClass{
|
|
public:
|
|
TestClass(){};
|
|
TestClass(uint32_t number1, uint64_t number2):
|
|
number1(number1), number2(number2){};
|
|
uint32_t number1 = -1;
|
|
uint64_t number2 = -1;
|
|
bool operator==(const TestClass& other){
|
|
return ((this->number1 == other.number1) and (this->number2 == other.number2));
|
|
};
|
|
};
|
|
ArrayList<TestClass> complexList(20);
|
|
SECTION("SimpleTest") {
|
|
REQUIRE(list.maxSize()==20);
|
|
REQUIRE(list.size == 0);
|
|
REQUIRE(list.insert(10) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
|
REQUIRE(list[0] == 10);
|
|
REQUIRE(list.front() != nullptr);
|
|
REQUIRE((*list.front()) == 10);
|
|
REQUIRE(list.back() != nullptr);
|
|
REQUIRE((*list.back()) == 10);
|
|
// Need to test the const version of back as well
|
|
const uint16_t* number = const_cast<const ArrayList<uint16_t>*>(&list)->back();
|
|
REQUIRE(*number == 10);
|
|
list.clear();
|
|
REQUIRE(list.size == 0);
|
|
}
|
|
SECTION("Fill and check"){
|
|
//This is an invalid element but its not a nullptr
|
|
REQUIRE(list.back() != nullptr);
|
|
for (auto i =0; i < 20; i++){
|
|
REQUIRE(list.insert(i) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
|
}
|
|
REQUIRE(list.insert(20) == static_cast<int>(ArrayList<uint16_t>::FULL));
|
|
ArrayList<uint16_t>::Iterator it = list.begin();
|
|
REQUIRE((*it) == 0);
|
|
it++;
|
|
REQUIRE((*it) == 1);
|
|
it--;
|
|
REQUIRE((*it) == 0);
|
|
it++;
|
|
for(auto it2 = list.begin(); it2!=list.end(); it2++){
|
|
if (it == it2){
|
|
REQUIRE((*it) == (*it2));
|
|
break;
|
|
}else{
|
|
REQUIRE((*it2) == 0);
|
|
REQUIRE(it2 != it);
|
|
}
|
|
}
|
|
}
|
|
SECTION("Const Iterator"){
|
|
ArrayList<uint16_t>::Iterator it = list.begin();
|
|
for (auto i =0; i < 10; i++){
|
|
REQUIRE(list.insert(i) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
|
}
|
|
it++;
|
|
const uint16_t* number = it.value;
|
|
REQUIRE(*number == 1);
|
|
}
|
|
|
|
SECTION("Const Iterator"){
|
|
ArrayList<TestClass>::Iterator it = complexList.begin();
|
|
for (auto i =0; i < 10; i++){
|
|
REQUIRE(complexList.insert(TestClass(i, i+1)) == static_cast<int>(HasReturnvaluesIF::RETURN_OK));
|
|
}
|
|
it++;
|
|
const TestClass* secondTest = it.value;
|
|
bool compare = TestClass(1, 2) == *secondTest;
|
|
REQUIRE(compare);
|
|
it++;
|
|
REQUIRE(it->number1 == 2);
|
|
REQUIRE(it->number2 == 3);
|
|
const ArrayList<TestClass>::Iterator it4(&(complexList[2]));
|
|
REQUIRE(it4->number1 == 2);
|
|
REQUIRE((*it4).number2 == 3);
|
|
REQUIRE(complexList.remaining()==10);
|
|
}
|
|
}
|