blob: 542750734ad1a9e31bd36ce8a9510a92a36b5cce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH, 2018 Johannes Kepler University
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
* Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
#include "../../core/fbtests/fbtestfixture.h"
#include <forte_uint.h>
#include <forte_bool.h>
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_CTU_tester_gen.cpp"
#endif
struct E_CTU_TestFixture : public CFBTestFixtureBase{
E_CTU_TestFixture() : CFBTestFixtureBase(g_nStringIdE_CTU){
SETUP_INPUTDATA(&mInPV);
SETUP_OUTPUTDATA(&mOutQ, &mOutCV);
CFBTestFixtureBase::setup();
}
CIEC_UINT mInPV; //Preset value
CIEC_BOOL mOutQ; //CV >= PV
CIEC_UINT mOutCV; //count value
bool checkCU(TForteUInt16 paPrevCV){
if(paPrevCV < CIEC_UINT::scm_nMaxVal){
if(((paPrevCV + 1) != mOutCV)){
return false;
}
else if(!checkForSingleOutputEventOccurence(0)){
return false;
}
}else{
if(CIEC_UINT::scm_nMaxVal != mOutCV && !eventChainEmpty()){
return false;
}
}
if(mOutQ != (mOutCV >= mInPV)){
return false;
}
return true;
}
bool checkR(){
if(0 != mOutCV || mOutQ){
return false;
}
if(!checkForSingleOutputEventOccurence(1)){
return false;
}
return true;
}
};
BOOST_FIXTURE_TEST_SUITE( CTUTests, E_CTU_TestFixture)
BOOST_AUTO_TEST_CASE(EventCU){
TForteUInt16 prevCV = 0;
TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
size_t numberOfValues = static_cast<size_t>(sizeof(valuesToTest) / sizeof(TForteUInt16));
for(size_t j = 0; j < numberOfValues; j++){
triggerEvent(1);
BOOST_CHECK(checkR());
mInPV = valuesToTest[j];
for(unsigned int k = 0; k < static_cast<unsigned int>(mInPV + 3); k++){
prevCV = mOutCV;
//Send event
triggerEvent(0);
BOOST_CHECK(checkCU(prevCV));
}
}
}
BOOST_AUTO_TEST_CASE(EventR){
size_t numberOfTries = 100;
TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
size_t numberOfValues = static_cast<size_t>(sizeof(valuesToTest) / sizeof(TForteUInt16));
for(size_t i = 0; i < numberOfTries; i++){
for(size_t j = 0; j < numberOfValues; j++){
mInPV = valuesToTest[j];
triggerEvent(1);
BOOST_CHECK(checkR());
}
}
}
BOOST_AUTO_TEST_CASE(Mix){
mInPV = 0;
triggerEvent(1);
BOOST_CHECK(checkR());
triggerEvent(0);
BOOST_CHECK(checkCU(0));
mInPV = 1;
triggerEvent(0);
BOOST_CHECK(checkCU(1));
triggerEvent(1);
BOOST_CHECK(checkR());
triggerEvent(0);
BOOST_CHECK(checkCU(0));
triggerEvent(0);
BOOST_CHECK(checkCU(1));
triggerEvent(0);
BOOST_CHECK(checkCU(2));
triggerEvent(1);
BOOST_CHECK(checkR());
mInPV = 65533;
for(TForteUInt16 i = 0; i < CIEC_UINT::scm_nMaxVal; i++){
//Send event
triggerEvent(0);
BOOST_CHECK(checkCU(i));
}
triggerEvent(0);
BOOST_CHECK(checkCU(CIEC_UINT::scm_nMaxVal));
triggerEvent(0);
BOOST_CHECK(checkCU(CIEC_UINT::scm_nMaxVal));
triggerEvent(0);
BOOST_CHECK(checkCU(CIEC_UINT::scm_nMaxVal));
triggerEvent(1);
BOOST_CHECK(checkR());
}
BOOST_AUTO_TEST_SUITE_END()