blob: fe886ae5d3090f848b0399776c918a49ec133f46 [file] [log] [blame]
RoomModel StaticConfigTest {
import etrice.api.types.boolean
import etrice.api.types.char
import etrice.api.types.int8
import etrice.api.types.int16
import etrice.api.types.int32
import etrice.api.types.int64
import etrice.api.types.float32
import etrice.api.types.float64
import etrice.api.types.string
import etrice.api.timer.PTimer
import etrice.api.timer.ATimerService
LogicalSystem System_StaticConfigTest {
SubSystemRef main: SubSystem_StaticConfigTest
}
SubSystemClass SubSystem_StaticConfigTest {
LayerConnection ref top satisfied_by timer.timer
ActorRef top: Top_ac
ActorRef timer: ATimerService
LogicalThread defaultThread
}
ActorClass Top_ac {
Structure {
ActorRef testee_1: Testee_1_ac
ActorRef tester: Tester_ac
LayerConnection ref testee_1 satisfied_by tester.spp
SAP timer: PTimer
}
Behavior {
ctor '''
etUnit_open("log", "StaticConfigTest");
etUnit_openTestSuite("org.eclipse.etrice.generator.c.tests.StaticConfigTest");'''
dtor '''
etUnit_closeTestSuite();
etUnit_close();'''
StateMachine {
Transition init: initial -> state0 {
action '''timer.startTimeout(1000);'''
}
Transition tr0: state0 -> state0 {
triggers {
<timeout: timer>
}
action '''etUnit_testFinished(-1);'''
}
State state0
}
}
}
ActorClass Tester_ac {
Interface {
SPP spp: TestProtocolWithDataClass
}
Structure {
ServiceImplementation of spp
Attribute caseId: int32
// none config test
Attribute data_3: Data_3_dc
ActorRef testee_super2: Testee_Super2_ac
}
Behavior {
StateMachine {
Transition init: initial -> s1 {
}
State s1 {
entry '''
caseId = etUnit_openTestCase("AttrConfigTest_case_Tester_ac");
Data_3_dc_varCheck3(&(data_3), caseId);
etUnit_closeTestCase(caseId);'''
}
}
}
}
ActorClass Testee_1_ac {
Interface {
conjugated Port conj_port: TestProtocolAttributes
}
Structure {
usercode1 '''#include "etUnit/etUnit.h"'''
external Port conj_port
Attribute caseId: int32
Attribute data_1: Data_1_dc
Attribute enumval1: Enum_1 = "one"
Attribute enumval2: Enum_2 = "four"
ActorRef testee_2: Testee_2_ac
}
Behavior {
StateMachine {
Transition init: initial -> s1 {
}
State s1 {
entry '''
caseId = etUnit_openTestCase("AttrConfigTest_case_Testee_1_ac");
Data_1_dc_varCheck1(&(data_1), caseId);
EXPECT_FALSE(caseId,"testee_1:data_1:1", data_1.bool_c);
EXPECT_TRUE(caseId,"testee_1:data_1:2", data_1.int8_c == 24);
EXPECT_TRUE(caseId,"testee_1:data_1:3", data_1.int16_c == 48);
EXPECT_TRUE(caseId,"testee_1:data_1:4", data_1.int32_c == 96);
EXPECT_TRUE(caseId,"testee_1:data_1:5", data_1.int64_c == 192);
EXPECT_EQUAL_FLOAT32(caseId,"testee_1:data_1:6", 9.6f, data_1.float32_c, 0.1f);
EXPECT_EQUAL_FLOAT64(caseId,"testee_1:data_1:7", 19.2, data_1.float64_c, 0.1);
EXPECT_TRUE(caseId,"testee_1:data_1:8", data_1.char_c == 'C');
EXPECT_TRUE(caseId,"testee_1:varCheck:8.1", strcmp(data_1.string_c, ":)") == 0 );
EXPECT_TRUE(caseId,"testee_1:data_1:10", data_1.bool_i);
EXPECT_TRUE(caseId,"testee_1:data_1:11", data_1.int8_i == 2);
EXPECT_TRUE(caseId,"testee_1:data_1:12", data_1.int16_i == 4);
EXPECT_TRUE(caseId,"testee_1:data_1:13", data_1.int32_i == 8);
EXPECT_TRUE(caseId,"testee_1:data_1:14", data_1.int64_i == 16);
EXPECT_EQUAL_FLOAT32(caseId,"testee_1:data_1:15", 1.6f, data_1.float32_i, 0.1f);
EXPECT_EQUAL_FLOAT64(caseId,"testee_1:data_1:16", 3.2, data_1.float64_i, 0.1);
EXPECT_TRUE(caseId,"testee_1:data_1:17", data_1.char_i == 'I');
EXPECT_TRUE(caseId,"testee_1:varCheck:18", strcmp(data_1.string_i, ":]") == 0 );
EXPECT_TRUE(caseId,"testee_1:data_1:19", data_1.bool_array_c[0] == ET_TRUE && data_1.bool_array_c[1] == ET_FALSE);
EXPECT_TRUE(caseId,"testee_1:data_1:20", data_1.int8_array_c[0] == 24 && data_1.int8_array_c[1] == 48);
EXPECT_TRUE(caseId,"testee_1:data_1:21", data_1.int16_array_c[0] == 48 && data_1.int16_array_c[1] == 96);
EXPECT_TRUE(caseId,"testee_1:data_1:22", data_1.int32_array_c[0] == 96 && data_1.int32_array_c[1] == 192);
EXPECT_TRUE(caseId,"testee_1:data_1:23", data_1.int64_array_c[0] == 192 && data_1.int64_array_c[1] == 384);
EXPECT_EQUAL_FLOAT32(caseId, "testee_1:data_1:24_1", 9.6f, data_1.float32_array_c[0], 0.1f);
EXPECT_EQUAL_FLOAT32(caseId, "testee_1:data_1:24_2", 9.6f, data_1.float32_array_c[1], 0.1f);
EXPECT_EQUAL_FLOAT64(caseId, "testee_1:data_1:25_1", 19.2, data_1.float64_array_c[0], 0.1);
EXPECT_EQUAL_FLOAT64(caseId, "testee_1:data_1:25_2", 19.2, data_1.float64_array_c[1], 0.1);
EXPECT_TRUE(caseId,"testee_1:data_1:26", strcmp(data_1.char_array_c, "Claz") == 0);
EXPECT_TRUE(caseId,"testee_1:data_1:27", data_1.bool_array_i[0] == ET_TRUE && data_1.bool_array_i[1] == ET_TRUE);
EXPECT_TRUE(caseId,"testee_1:data_1:28", data_1.int8_array_i[0] == 2 && data_1.int8_array_i[1] == 6);
EXPECT_TRUE(caseId,"testee_1:data_1:29", data_1.int16_array_i[0] == 4 && data_1.int16_array_i[1] == 12);
EXPECT_TRUE(caseId,"testee_1:data_1:30", data_1.int32_array_i[0] == 8 && data_1.int32_array_i[1] == 24);
EXPECT_TRUE(caseId,"testee_1:data_1:31", data_1.int64_array_i[0] == 16 && data_1.int64_array_i[1] == 48);
EXPECT_EQUAL_FLOAT32(caseId, "testee_1:data_1:32_1", 1.6f, data_1.float32_array_i[0], 0.1f);
EXPECT_EQUAL_FLOAT32(caseId, "testee_1:data_1:32_2", 1.6f, data_1.float32_array_i[1], 0.1f);
EXPECT_EQUAL_FLOAT64(caseId, "testee_1:data_1:33_1", 3.2, data_1.float64_array_i[0], 0.1);
EXPECT_EQUAL_FLOAT64(caseId, "testee_1:data_1:33_2", 3.2, data_1.float64_array_i[1], 0.1);
EXPECT_TRUE(caseId,"testee_1:data_1:34", strcmp(data_1.char_array_i, "Inst") == 0);
EXPECT_TRUE(caseId,"testee_1:data_1:35", data_1.data_2.int32_c == 42);
EXPECT_TRUE(caseId,"testee_1:data_1:36", data_1.data_2.int32_i == 43);
EXPECT_TRUE(caseId,"testee_1:conj_port:36", ((TestProtocolAttributesConjPort_var*)self->constData->conj_port.varData)->array2_r[0] == 11);
EXPECT_TRUE(caseId,"testee_1:conj_port:37", ((TestProtocolAttributesConjPort_var*)self->constData->conj_port.varData)->array2_r[1] == 22);
EXPECT_TRUE(caseId,"testee_1:conj_port:38", ((TestProtocolAttributesConjPort_var*)self->constData->conj_port.varData)->array2_c[0] == 16);
EXPECT_TRUE(caseId,"testee_1:conj_port:39", ((TestProtocolAttributesConjPort_var*)self->constData->conj_port.varData)->array2_c[1] == 32);
EXPECT_TRUE(caseId,"testee_1:conj_port:40", ((TestProtocolAttributesConjPort_var*)self->constData->conj_port.varData)->array2_i[0] == 1);
EXPECT_TRUE(caseId,"testee_1:conj_port:41", ((TestProtocolAttributesConjPort_var*)self->constData->conj_port.varData)->array2_i[1] == 2);
etUnit_testFinished(caseId);
EXPECT_TRUE(caseId,"testee_1:enumval1", enumval1 == Enum_1.two);
EXPECT_TRUE(caseId,"testee_1:enumval2", enumval2 == Enum_2.three);
etUnit_closeTestCase(caseId);'''
}
}
}
}
ActorClass Testee_Super2_ac {
Interface {
Port reg_port: TestProtocolAttributes
}
Structure {
usercode1 '''#include "etUnit/etUnit.h"'''
external Port reg_port
Attribute caseId: int32
// test
Attribute data_2: Data_2_dc
Attribute float64_super_r: float64 = "1.1"
Attribute float64_super_c: float64 = "1.1"
Attribute float64_super_i: float64 = "1.1"
}
Behavior {
ctor '''testInstanceConfig();'''
Operation testInstanceConfig() '''
caseId = etUnit_openTestCase("AttrConfigTest_case_Testee_Super2_ac");
EXPECT_EQUAL_FLOAT64(caseId, "Testee_Super2_ac:1", 1.1, float64_super_r, 0.1);
EXPECT_EQUAL_FLOAT64(caseId, "Testee_Super2_ac:2", 2.2, float64_super_c, 0.1);
EXPECT_EQUAL_FLOAT64(caseId, "Testee_Super2_ac:3", 3.3, float64_super_i, 0.1);
EXPECT_EQUAL_FLOAT32(caseId, "Testee_Super2_ac:7", 25.0f, ((TestProtocolAttributesPort_var*) self->constData->reg_port.varData)->float_i, 0.1f);
EXPECT_EQUAL_FLOAT32(caseId, "Testee_Super2_ac:5", 4.0f, ((TestProtocolAttributesPort_var*) self->constData->reg_port.varData)->float_r, 0.1f);
EXPECT_EQUAL_FLOAT32(caseId, "Testee_Super2_ac:6", 3.0f, ((TestProtocolAttributesPort_var*) self->constData->reg_port.varData)->float_c, 0.1f);
etUnit_closeTestCase(caseId);'''
}
}
ActorClass Testee_2_ac extends Testee_Super2_ac {
Structure {
SAP sap: TestProtocolWithDataClass
Attribute int32_own_r: int32 = "11"
Attribute int32_own_c: int32 = "11"
Attribute int32_own_i: int32 = "11"
}
Behavior {
override Operation testInstanceConfig() '''
caseId = etUnit_openTestCase("AttrConfigTest_case_Testee_2_ac");
EXPECT_EQUAL_FLOAT64(caseId, "Testee_2_ac:2", 4.4, float64_super_i, 0.1);
EXPECT_EQUAL_FLOAT32(caseId, "Testee_2_ac:9", 50.0f, ((TestProtocolAttributesPort_var*) self->constData->reg_port.varData)->float_i, 0.1f);'''
StateMachine {
Transition init: initial -> s1 {
}
State s1 {
entry '''
EXPECT_EQUAL_FLOAT64(caseId, "Testee_2_ac:1", 2.2, float64_super_c, 0.1);
EXPECT_TRUE(caseId, "Testee_2_ac:3", int32_own_r == 11);
EXPECT_TRUE(caseId, "Testee_2_ac:4", int32_own_c == 12);
EXPECT_TRUE(caseId, "Testee_2_ac:5", int32_own_i == 13);
EXPECT_EQUAL_FLOAT32(caseId, "Testee_2_ac:6", 4.0f, ((TestProtocolAttributesPort_var*) self->constData->reg_port.varData)->float_r, 0.1f);
EXPECT_EQUAL_FLOAT32(caseId, "Testee_2_ac:7", 3.0f, ((TestProtocolAttributesPort_var*) self->constData->reg_port.varData)->float_c, 0.1f);
Data_3_dc_varCheck3(&(((TestProtocolWithDataClassConjPort_var*)self->constData->sap.varData)->sap_data_3), caseId);
EXPECT_TRUE(caseId, "Testee_2_ac:sap:10", ((TestProtocolWithDataClassConjPort_var*)self->constData->sap.varData)->sap_data_2.int32_r == 1);
EXPECT_TRUE(caseId, "Testee_2_ac:sap:11", ((TestProtocolWithDataClassConjPort_var*)self->constData->sap.varData)->sap_data_2.int32_c == 2);
EXPECT_TRUE(caseId, "Testee_2_ac:sap:12", ((TestProtocolWithDataClassConjPort_var*)self->constData->sap.varData)->sap_data_2.int32_i == 3);
etUnit_closeTestCase(caseId);'''
}
}
}
}
ProtocolClass TestProtocolAttributes {
incoming {
Message dummy()
}
regular PortClass
{
Attribute float_r: float32 = "4"
Attribute float_c: float32 = "16"
Attribute float_i: float32 = "256"
}
conjugated PortClass
{
Attribute array2_r [2]: int64 = "{11,22}"
Attribute array2_c [2]: int64 = "{0,0}"
Attribute array2_i [2]: int64 = "{0,0}"
}
}
ProtocolClass TestProtocolWithDataClass {
usercode1 '''
#include "Data_2_dc.h"
#include "Data_3_dc.h"'''
incoming {
Message dummy()
}
// SAP
conjugated PortClass
{
Attribute sap_data_2: Data_2_dc
// none config test
Attribute sap_data_3: Data_3_dc
}
}
ExternalType extType -> "int" default "999"
DataClass Data_Super1_dc {
// PrimitiveType
Attribute bool_r: boolean = "false"
Attribute bool_c: boolean = "false"
Attribute bool_i: boolean = "false"
// Array
Attribute bool_array_r [2]: boolean = "{ ET_FALSE, false }"
Attribute bool_array_c [2]: boolean = "{ false, false }"
Attribute bool_array_i [2]: boolean = "{ false, false }"
}
DataClass Data_1_dc extends Data_Super1_dc {
usercode1 '''#include "etUnit/etUnit.h"'''
Attribute int8_r: int8 = "8"
Attribute int8_c: int8 = "8"
Attribute int8_i: int8 = "8"
Attribute int16_r: int16 = "16"
Attribute int16_c: int16 = "16"
Attribute int16_i: int16 = "16"
Attribute int32_r: int32 = "32"
Attribute int32_c: int32 = "32"
Attribute int32_i: int32 = "32"
Attribute int64_r: int64 = "64"
Attribute int64_c: int64 = "64"
Attribute int64_i: int64 = "64"
Attribute float32_r: float32 = "3.2"
Attribute float32_c: float32 = "3.2"
Attribute float32_i: float32 = "3.2"
Attribute float64_r: float64 = "6.4"
Attribute float64_c: float64 = "6.4"
Attribute float64_i: float64 = "6.4"
Attribute char_r: char = "R"
Attribute char_c: char = 'R'
Attribute char_i: char = "R"
Attribute string_r: string = ":/"
Attribute string_c: string = ":/"
Attribute string_i: string = ":/"
// Array
Attribute int8_array_r [2]: int8 = "{ 8, 16 }"
Attribute int8_array_c [2]: int8 = "{ 8, 16 }"
Attribute int8_array_i [2]: int8 = "{ 8, 16 }"
Attribute int16_array_r [2]: int16 = "{ 16, 32 }"
Attribute int16_array_c [2]: int16 = "{ 16, 32 }"
Attribute int16_array_i [2]: int16 = "{ 16, 32 }"
Attribute int32_array_r [2]: int32 = "{ 32, 64 }"
Attribute int32_array_c [2]: int32 = "{ 32, 64 }"
Attribute int32_array_i [2]: int32 = "{ 32, 64 }"
Attribute int64_array_r [2]: int64 = "{ 64, 128 }"
Attribute int64_array_c [2]: int64 = "{ 64, 128 }"
Attribute int64_array_i [2]: int64 = "{ 64, 128 }"
Attribute float32_array_r [2]: float32 = "{ 3.2, 6.4 }"
Attribute float32_array_c [2]: float32 = "{ 3.2, 6.4 }"
Attribute float32_array_i [2]: float32 = "{ 3.2, 6.4 }"
Attribute float64_array_r [2]: float64 = "{ 6.4, 12.8 }"
Attribute float64_array_c [2]: float64 = "{ 6.4, 12.8 }"
Attribute float64_array_i [2]: float64 = "{ 6.4, 12.8 }"
Attribute char_array_r [5]: char = "ROOM"
Attribute char_array_c [5]: char = "ROOM"
Attribute char_array_i [5]: char = "ROOM"
// ComplexType
Attribute data_2: Data_2_dc
Operation varCheck1(caseId: int32) '''
Data_2_dc_varCheck2(&(data_2), caseId);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:1", bool_r == ET_FALSE);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:2", int8_r == 8);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:3", int16_r == 16);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:4", int32_r == 32);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:5", int64_r == 64);
EXPECT_EQUAL_FLOAT32(caseId,"Data_1_dc:varCheck:6", 3.2f, float32_r, 0.1f);
EXPECT_EQUAL_FLOAT64(caseId,"Data_1_dc:varCheck:7", 6.4, float64_r, 0.1);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:8", char_r == 'R');
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:8", strcmp(string_r, ":/") == 0 );
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:10", bool_array_r[0] == ET_FALSE && bool_array_r[1] == ET_FALSE);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:11", int8_array_r[0] == 8 && int8_array_r[1] == 16);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:12", int16_array_r[0] == 16 && int16_array_r[1] == 32);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:13", int32_array_r[0] == 32 && int32_array_r[1] == 64);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:24", int64_array_r[0] == 64 && int64_array_r[1] == 128);
EXPECT_EQUAL_FLOAT32(caseId, "Data_1_dc:varCheck:25_1", 3.2f, float32_array_r[0], 0.1f);
EXPECT_EQUAL_FLOAT32(caseId, "Data_1_dc:varCheck:25_2", 6.4f, float32_array_r[1], 0.1f);
EXPECT_EQUAL_FLOAT64(caseId, "Data_1_dc:varCheck:26_1", 6.4, float64_array_r[0], 0.1);
EXPECT_EQUAL_FLOAT64(caseId, "Data_1_dc:varCheck:26_2", 12.8, float64_array_r[1], 0.1);
EXPECT_TRUE(caseId,"Data_1_dc:varCheck:27", strcmp(char_array_r, "ROOM")==0);'''
}
DataClass Data_2_dc {
usercode1 '''#include "etUnit/etUnit.h"'''
Attribute int32_r: int32 = "1"
Attribute int32_c: int32 = "1"
Attribute int32_i: int32 = "1"
Operation varCheck2(caseId: int32): void '''EXPECT_TRUE(caseId, "Data_2_dc:1", int32_r == 1);'''
}
DataClass Data_3_dc {
usercode1 '''#include "etUnit/etUnit.h"'''
// none config test
Attribute primitive_ref: int32 ref
Attribute primitive_ref_array [2]: int32 ref
Attribute dataClass_array [2]: Data_2_dc
Attribute dataClass_ref: Data_2_dc ref
Attribute dataClass_ref_array [2]: Data_2_dc ref
Attribute ext_type: extType
Attribute ext_type_array [2]: extType
Attribute ext_type_ref: extType ref
Attribute ext_type_ref_array [2]: extType ref
Operation varCheck3(caseId: int32): void '''
EXPECT_TRUE(caseId, "Data_3_dc:1", primitive_ref == NULL);
EXPECT_TRUE(caseId, "Data_3_dc:2", primitive_ref_array[0] == NULL && primitive_ref_array[1] == NULL);
EXPECT_TRUE(caseId, "Data_3_dc:3", dataClass_ref == NULL);
EXPECT_TRUE(caseId, "Data_3_dc:4", dataClass_array[0].int32_r == 1 && dataClass_array[0].int32_c == 1 && dataClass_array[0].int32_i == 1);
EXPECT_TRUE(caseId, "Data_3_dc:4", dataClass_array[1].int32_r == 1 && dataClass_array[1].int32_c == 1 && dataClass_array[1].int32_i == 1);
EXPECT_TRUE(caseId, "Data_3_dc:5", dataClass_ref == NULL);
EXPECT_TRUE(caseId, "Data_3_dc:6", dataClass_ref_array[0] == NULL && dataClass_ref_array[1] == NULL);
EXPECT_TRUE(caseId, "Data_3_dc:7", ext_type == 999);
EXPECT_TRUE(caseId, "Data_3_dc:8", ext_type_array[0] == 999 && ext_type_array[1] == 999);
EXPECT_TRUE(caseId, "Data_3_dc:9", ext_type_ref == NULL);
EXPECT_TRUE(caseId, "Data_3_dc:10", ext_type_ref_array[0] == NULL && dataClass_ref_array[1] == NULL);'''
}
Enumeration Enum_1 {
zero,
one,
two
}
Enumeration Enum_2 of int16 {
three = 3,
four
}
}