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
	}
}