blob: 4f253c7e38ac96d1b8fc9e50f7e8f49718dae0c3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 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:
* Alois Zoitl - initial tests
*******************************************************************************/
#include "../../core/fbtests/fbtestfixture.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "GEN_STRUCT_DEMUX_tester_gen.cpp"
#endif
#include "struct_mux_demux_data.h"
struct STRUCT_DEMUX_TestFixture_1 : public CFBTestFixtureBase{
STRUCT_DEMUX_TestFixture_1() : CFBTestFixtureBase(g_nStringIdSTRUCT_DEMUX_1Struct_Muxer_Test_Struct_1){
SETUP_INPUTDATA(&mIn);
SETUP_OUTPUTDATA(&mVar1, &mVar2, &mVar3);
CFBTestFixtureBase::setup();
}
CIEC_INT mVar1;
CIEC_INT mVar2;
CIEC_STRING mVar3;
CIEC_Struct_Muxer_Test_Struct_1 mIn;
void checkStructValues(){
BOOST_CHECK_EQUAL(mVar1, mIn.Var1());
BOOST_CHECK_EQUAL(mVar2, mIn.Var2());
BOOST_CHECK_EQUAL(strcmp(mVar3.getValue(), mIn.Var3().getValue()), 0);
}
};
BOOST_FIXTURE_TEST_SUITE( STRUCT_DEMUX_MainTests, STRUCT_DEMUX_TestFixture_1)
BOOST_AUTO_TEST_CASE(initalValueCheck) {
triggerEvent(0);
BOOST_CHECK(checkForSingleOutputEventOccurence(0));
checkStructValues();
}
BOOST_AUTO_TEST_CASE(changeValueCheck) {
mIn.Var1() = -256;
mIn.Var2() = 23145;
mIn.Var3() = "My Test String!";
triggerEvent(0);
BOOST_CHECK(checkForSingleOutputEventOccurence(0));
checkStructValues();
}
BOOST_AUTO_TEST_CASE(updateValueCheck) {
mIn.Var1() = 12;
mIn.Var2() = 11111;
mIn.Var3() = "string!";
triggerEvent(0);
BOOST_CHECK(checkForSingleOutputEventOccurence(0));
checkStructValues();
//change values to check consecutive updates
mIn.Var1() = 32255;
mIn.Var2() = 12345;
mIn.Var3() = "new string!";
triggerEvent(0);
BOOST_CHECK(checkForSingleOutputEventOccurence(0));
checkStructValues();
}
BOOST_AUTO_TEST_CASE(steadyStateValueCheck) {
mIn.Var1() = 13;
mIn.Var2() = 234;
mIn.Var3() = "stable value";
for(size_t i = 0; i < 45; i++){
triggerEvent(0);
BOOST_CHECK(checkForSingleOutputEventOccurence(0));
checkStructValues();
}
}
}
struct STRUCT_DEMUX_TestFixture_2 : public CFBTestFixtureBase{
STRUCT_DEMUX_TestFixture_2() : CFBTestFixtureBase(g_nStringIdSTRUCT_DEMUX_1Struct_Muxer_Test_Struct_2){
SETUP_INPUTDATA(&mIn);
SETUP_OUTPUTDATA(&mVar1, &mVar2, &mVar3);
CFBTestFixtureBase::setup();
}
CIEC_INT mVar1;
CIEC_STRING mVar2;
CIEC_INT mVar3;
CIEC_Struct_Muxer_Test_Struct_2 mIn;
void checkStructValues(){
BOOST_CHECK_EQUAL(mVar1, mIn.Var1());
BOOST_CHECK_EQUAL(strcmp(mVar2.getValue(), mIn.Var2().getValue()), 0);
BOOST_CHECK_EQUAL(mVar3, mIn.Var3());
}
};
BOOST_FIXTURE_TEST_SUITE( STRUCT_DEMUX_SecondStructTest, STRUCT_DEMUX_TestFixture_2)
BOOST_AUTO_TEST_CASE(initalValueCheck) {
triggerEvent(0);
BOOST_CHECK(checkForSingleOutputEventOccurence(0));
checkStructValues();
}
BOOST_AUTO_TEST_CASE(changeValueCheck) {
mIn.Var1() = 1234;
mIn.Var2() = "this is the second struct!";
mIn.Var3() = -2345;
triggerEvent(0);
BOOST_CHECK(checkForSingleOutputEventOccurence(0));
checkStructValues();
}
}
BOOST_AUTO_TEST_SUITE(STRUCT_DEMUX_FailedCreationTest)
BOOST_AUTO_TEST_CASE(missingDataType){
CFunctionBlock *fb = CTypeLib::createFB(g_nStringIdInstanceName, g_nStringIdSTRUCT_DEMUX_1UnknownType, 0);
BOOST_CHECK(0 == fb);
}
BOOST_AUTO_TEST_CASE(wrongDataType){
CFunctionBlock *fb = CTypeLib::createFB(g_nStringIdInstanceName, g_nStringIdSTRUCT_DEMUX_1STRING, 0);
BOOST_CHECK(0 == fb);
fb = CTypeLib::createFB(g_nStringIdInstanceName, g_nStringIdSTRUCT_DEMUX_1REAL, 0);
BOOST_CHECK(0 == fb);
}
BOOST_AUTO_TEST_CASE(emptyStruct) {
CFunctionBlock *fb = CTypeLib::createFB(g_nStringIdInstanceName, g_nStringIdSTRUCT_DEMUX_1Struct_Muxer_Test_Struct_3, 0);
BOOST_CHECK(0 == fb);
}
BOOST_AUTO_TEST_CASE(bigStruct) {
CFunctionBlock *fb = CTypeLib::createFB(g_nStringIdInstanceName, g_nStringIdSTRUCT_DEMUX_1Struct_Muxer_Test_Struct_4, 0);
BOOST_CHECK(0 == fb);
}
}