#include #include #include #include #include TEST_CASE( "Static Fifo Tests", "[TestFifo]") { INFO("Fifo Tests"); struct Test{ uint64_t number1; uint32_t number2; uint8_t number3; bool operator==(struct Test& other){ if ((other.number1 == this->number1) and (other.number1 == this->number1) and (other.number1 == this->number1)){ return true; } return false; } }; FIFO fifo; std::vector list; struct Test structOne({UINT64_MAX, UINT32_MAX, UINT8_MAX}); struct Test structTwo({0, 1, 2}); struct Test structThree({42, 43, 44}); list.push_back(structThree); list.push_back(structTwo); list.push_back(structOne); SECTION("Insert, retrieval test"){ REQUIRE(fifo.getMaxCapacity()==3); REQUIRE(fifo.size()==0); REQUIRE(fifo.empty()); REQUIRE(not fifo.full()); REQUIRE(fifo.insert(structOne)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.insert(structTwo)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.insert(structThree)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.insert(structTwo)==static_cast(FIFOBase::FULL)); struct Test testptr; REQUIRE(fifo.peek(&testptr)==static_cast(HasReturnvaluesIF::RETURN_OK)); bool equal = testptr == structOne; REQUIRE(equal); REQUIRE(fifo.size()==3); REQUIRE(fifo.full()); REQUIRE(not fifo.empty()); for(size_t i=2;i<3;i--){ testptr.number1 = 0; testptr.number2 = 0; testptr.number3 = 0; REQUIRE(fifo.retrieve(&testptr)==static_cast(HasReturnvaluesIF::RETURN_OK)); equal = testptr == list[i]; REQUIRE(equal); REQUIRE(fifo.size()==i); } testptr.number1 = 0; testptr.number2 = 0; testptr.number3 = 0; REQUIRE(fifo.retrieve(&testptr)==static_cast(FIFOBase::EMPTY)); REQUIRE(fifo.peek(&testptr)==static_cast(FIFOBase::EMPTY)); REQUIRE(not fifo.full()); REQUIRE(fifo.empty()); REQUIRE(fifo.pop()==static_cast(FIFOBase::EMPTY)); REQUIRE(fifo.insert(structOne)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.size()==1); REQUIRE(fifo.insert(structTwo)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.size()==2); REQUIRE(fifo.pop()==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.size()==1); testptr.number1 = 0; testptr.number2 = 0; testptr.number3 = 0; // Test that retrieve and peek will not cause a nullptr dereference struct Test* ptr = nullptr; REQUIRE(fifo.retrieve(ptr) == static_cast(HasReturnvaluesIF::RETURN_FAILED)); REQUIRE(fifo.peek(ptr) == static_cast(HasReturnvaluesIF::RETURN_FAILED)); REQUIRE(fifo.peek(&testptr)==static_cast(HasReturnvaluesIF::RETURN_OK)); equal = testptr == structTwo; REQUIRE(equal); REQUIRE(fifo.pop()==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.size()==0); REQUIRE(fifo.empty()); }; SECTION("Copy Test"){ REQUIRE(fifo.insert(structOne)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.insert(structTwo)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.insert(structThree)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.size()==3); REQUIRE(fifo.full()); REQUIRE(not fifo.empty()); FIFO fifo2(fifo); REQUIRE(fifo2.size()==3); REQUIRE(fifo2.full()); REQUIRE(not fifo2.empty()); for(size_t i=2;i<3;i--){ struct Test testptr = {0, 0, 0}; REQUIRE(fifo2.retrieve(&testptr)==static_cast(HasReturnvaluesIF::RETURN_OK)); bool equal = testptr == list[i]; REQUIRE(equal); REQUIRE(fifo2.size()==i); } }; SECTION("Assignment Test"){ REQUIRE(fifo.insert(structOne)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.insert(structTwo)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.insert(structThree)==static_cast(HasReturnvaluesIF::RETURN_OK)); REQUIRE(fifo.size()==3); REQUIRE(fifo.full()); REQUIRE(not fifo.empty()); FIFO fifo2; fifo2 = fifo; REQUIRE(fifo2.size()==3); REQUIRE(fifo2.full()); REQUIRE(not fifo2.empty()); for(size_t i=2;i<3;i--){ struct Test testptr = {0, 0, 0}; REQUIRE(fifo2.retrieve(&testptr)==static_cast(HasReturnvaluesIF::RETURN_OK)); bool equal = testptr == list[i]; REQUIRE(equal); REQUIRE(fifo2.size()==i); } }; };