From d4e9a25eb10e294324e75bb9702d1bb9b3b675a0 Mon Sep 17 00:00:00 2001 From: Adrien Kirjak <adrien.kirjak@ericsson.com> Date: Mon, 12 Mar 2018 09:12:54 +0100 Subject: [PATCH] Added new tests from etsi and updated SoC document Signed-off-by: Adrien Kirjak <adrien.kirjak@ericsson.com> --- .../05_basic_language_elements.script | 6985 +++++++++++------ .../negative_tests/06_types_and_values.script | 703 +- .../negative_tests/07-14_folder.script | 367 + .../negative_tests/08_empty_modules.script | 28 + .../negative_tests/15_templates.script | 92 +- .../negative_tests/16-20_folders.script | 62 + .../21_configuration_operations.script | 73 +- .../22_communication_operations.script | 3228 ++++++-- .../negative_tests/23-27-B_folders.script | 296 +- .../Sem_050202_Uniqueness_004.ttcn | 50 + .../Sem_050202_Uniqueness_005.ttcn | 54 + ...40102_parameters_of_kind_template_008.ttcn | 2 +- ...40102_parameters_of_kind_template_018.ttcn | 43 + ...40102_parameters_of_kind_template_019.ttcn | 43 + ...05040103_parameters_of_kind_timer_001.ttcn | 47 + ...05040103_parameters_of_kind_timer_002.ttcn | 48 + ...05040103_parameters_of_kind_timer_003.ttcn | 41 + ...05040103_parameters_of_kind_timer_004.ttcn | 43 + ...05040103_parameters_of_kind_timer_001.ttcn | 44 + ...05040103_parameters_of_kind_timer_002.ttcn | 56 + ...05040103_parameters_of_kind_timer_002.ttcn | 44 + ...05040103_parameters_of_kind_timer_003.ttcn | 46 + ..._05040104_parameters_of_kind_port_001.ttcn | 51 + ..._05040104_parameters_of_kind_port_002.ttcn | 53 + ..._05040104_parameters_of_kind_port_003.ttcn | 48 + ..._05040104_parameters_of_kind_port_004.ttcn | 47 + ..._05040104_parameters_of_kind_port_005.ttcn | 49 + ..._05040104_parameters_of_kind_port_006.ttcn | 46 + ..._05040104_parameters_of_kind_port_002.ttcn | 48 + .../NegSem_050402_actual_parameters_057.ttcn | 7 +- .../NegSem_050402_actual_parameters_058.ttcn | 7 +- .../NegSem_050402_actual_parameters_059.ttcn | 7 +- .../NegSem_050402_actual_parameters_060.ttcn | 7 +- .../NegSem_050402_actual_parameters_061.ttcn | 7 +- .../NegSem_050402_actual_parameters_062.ttcn | 7 +- .../NegSem_050402_actual_parameters_063.ttcn | 7 +- .../NegSem_050402_actual_parameters_064.ttcn | 7 +- .../NegSem_050402_actual_parameters_065.ttcn | 7 +- .../NegSem_050402_actual_parameters_066.ttcn | 7 +- .../NegSem_050402_actual_parameters_067.ttcn | 7 +- .../NegSem_050402_actual_parameters_068.ttcn | 7 +- .../NegSem_050402_actual_parameters_069.ttcn | 7 +- .../NegSem_050402_actual_parameters_070.ttcn | 8 +- .../NegSem_050402_actual_parameters_071.ttcn | 5 +- .../NegSem_050402_actual_parameters_072.ttcn | 7 +- .../NegSem_050402_actual_parameters_073.ttcn | 7 +- .../NegSem_050402_actual_parameters_074.ttcn | 5 +- .../NegSem_050402_actual_parameters_146.ttcn | 46 + .../NegSem_050402_actual_parameters_147.ttcn | 51 + .../NegSem_050402_actual_parameters_148.ttcn | 51 + .../NegSem_050402_actual_parameters_149.ttcn | 48 + .../NegSem_050402_actual_parameters_150.ttcn | 48 + .../NegSem_050402_actual_parameters_151.ttcn | 47 + .../NegSem_050402_actual_parameters_152.ttcn | 50 + .../NegSem_050402_actual_parameters_153.ttcn | 55 + .../NegSem_050402_actual_parameters_154.ttcn | 54 + .../NegSem_050402_actual_parameters_155.ttcn | 52 + .../NegSem_050402_actual_parameters_156.ttcn | 52 + .../NegSem_050402_actual_parameters_157.ttcn | 51 + .../NegSem_050402_actual_parameters_158.ttcn | 43 + .../NegSem_050402_actual_parameters_159.ttcn | 41 + .../NegSem_050402_actual_parameters_160.ttcn | 47 + .../NegSem_050402_actual_parameters_161.ttcn | 39 + .../NegSem_050402_actual_parameters_162.ttcn | 48 + .../NegSem_050402_actual_parameters_163.ttcn | 48 + .../NegSem_050402_actual_parameters_164.ttcn | 49 + .../NegSem_050402_actual_parameters_165.ttcn | 46 + .../NegSem_050402_actual_parameters_166.ttcn | 50 + .../NegSem_050402_actual_parameters_167.ttcn | 52 + .../NegSem_050402_actual_parameters_168.ttcn | 51 + .../NegSem_050402_actual_parameters_169.ttcn | 50 + .../NegSem_050402_actual_parameters_170.ttcn | 53 + .../NegSem_050402_actual_parameters_171.ttcn | 50 + .../NegSem_050402_actual_parameters_172.ttcn | 54 + .../NegSem_050402_actual_parameters_173.ttcn | 56 + .../NegSem_050402_actual_parameters_174.ttcn | 55 + .../NegSem_050402_actual_parameters_175.ttcn | 54 + .../NegSem_050402_actual_parameters_176.ttcn | 57 + .../NegSem_050402_actual_parameters_177.ttcn | 41 + .../NegSem_050402_actual_parameters_178.ttcn | 44 + .../NegSem_050402_actual_parameters_179.ttcn | 45 + .../NegSem_050402_actual_parameters_180.ttcn | 45 + .../NegSem_050402_actual_parameters_181.ttcn | 45 + .../NegSem_050402_actual_parameters_182.ttcn | 49 + .../Sem_050402_actual_parameters_113.ttcn | 7 +- .../Sem_050402_actual_parameters_114.ttcn | 8 +- .../Sem_050402_actual_parameters_115.ttcn | 7 +- .../Sem_050402_actual_parameters_116.ttcn | 7 +- .../Sem_050402_actual_parameters_117.ttcn | 7 +- .../Sem_050402_actual_parameters_118.ttcn | 8 +- .../Sem_050402_actual_parameters_119.ttcn | 7 +- .../Sem_050402_actual_parameters_120.ttcn | 7 +- .../Sem_050402_actual_parameters_121.ttcn | 7 +- .../Sem_050402_actual_parameters_122.ttcn | 7 +- .../Sem_050402_actual_parameters_123.ttcn | 7 +- .../Sem_050402_actual_parameters_124.ttcn | 7 +- .../Sem_050402_actual_parameters_125.ttcn | 7 +- .../Sem_050402_actual_parameters_126.ttcn | 7 +- .../Sem_050402_actual_parameters_127.ttcn | 7 +- .../Sem_050402_actual_parameters_128.ttcn | 7 +- .../Sem_050402_actual_parameters_129.ttcn | 7 +- .../Sem_050402_actual_parameters_130.ttcn | 7 +- .../Sem_050402_actual_parameters_135.ttcn | 5 +- .../Sem_050402_actual_parameters_136.ttcn | 5 +- .../Sem_050402_actual_parameters_141.ttcn | 5 +- .../Sem_050402_actual_parameters_142.ttcn | 4 +- .../Sem_050402_actual_parameters_147.ttcn | 6 +- .../Sem_050402_actual_parameters_148.ttcn | 6 +- .../Sem_050402_actual_parameters_154.ttcn | 4 +- .../Sem_050402_actual_parameters_203.ttcn | 51 + .../Sem_050402_actual_parameters_204.ttcn | 51 + .../Sem_050402_actual_parameters_205.ttcn | 54 + .../Sem_050402_actual_parameters_206.ttcn | 55 + .../Sem_050402_actual_parameters_207.ttcn | 55 + .../Sem_050402_actual_parameters_208.ttcn | 54 + .../Sem_050402_actual_parameters_209.ttcn | 56 + .../Sem_050402_actual_parameters_210.ttcn | 55 + .../Sem_050402_actual_parameters_211.ttcn | 46 + .../Sem_050402_actual_parameters_212.ttcn | 55 + .../Sem_050402_actual_parameters_213.ttcn | 55 + .../Sem_050402_actual_parameters_214.ttcn | 58 + .../Sem_050402_actual_parameters_215.ttcn | 59 + .../Sem_050402_actual_parameters_216.ttcn | 59 + .../Sem_050402_actual_parameters_217.ttcn | 58 + .../Sem_050402_actual_parameters_218.ttcn | 59 + .../Sem_050402_actual_parameters_219.ttcn | 59 + .../Sem_050402_actual_parameters_220.ttcn | 50 + .../Sem_050402_actual_parameters_221.ttcn | 45 + .../Sem_050402_actual_parameters_222.ttcn | 49 + .../Sem_050402_actual_parameters_223.ttcn | 44 + .../Sem_050402_actual_parameters_224.ttcn | 48 + .../Sem_050402_actual_parameters_225.ttcn | 44 + .../Sem_050402_actual_parameters_226.ttcn | 48 + .../Sem_0505_cyclic_definitions_004.ttcn | 4 +- ...Sem_06010101_AccessStringElements_001.ttcn | 46 + ...Sem_06010101_AccessStringElements_002.ttcn | 46 + ...Sem_06010101_AccessStringElements_003.ttcn | 46 + ...Sem_06010101_AccessStringElements_004.ttcn | 46 + ...Sem_06010101_AccessStringElements_005.ttcn | 46 + ...Sem_06010101_AccessStringElements_006.ttcn | 46 + .../Sem_060101_TopLevel_008.ttcn | 48 + .../Sem_060101_TopLevel_009.ttcn | 48 + .../Sem_060101_TopLevel_010.ttcn | 48 + .../Sem_060101_TopLevel_011.ttcn | 50 + .../Sem_060101_TopLevel_012.ttcn | 48 + .../Sem_060101_TopLevel_013.ttcn | 49 + .../Sem_060101_TopLevel_014.ttcn | 40 + .../Sem_060101_TopLevel_015.ttcn | 41 + ...060204_enumerated_type_and_values_012.ttcn | 47 + ...060204_enumerated_type_and_values_001.ttcn | 30 + ...060204_enumerated_type_and_values_007.ttcn | 51 + ..._referencing_fields_of_union_type_007.ttcn | 56 + ..._referencing_fields_of_union_type_008.ttcn | 58 + .../NegSyn_060207_arrays_005.ttcn | 29 + .../NegSem_06021301_LengthSubtyping_005.ttcn | 30 + .../NegSem_06021301_LengthSubtyping_006.ttcn | 32 + .../NegSyn_0602_TopLevel_004.ttcn | 37 + .../NegSyn_0602_TopLevel_005.ttcn | 51 + .../NegSyn_0602_TopLevel_006.ttcn | 55 + .../NegSyn_0602_TopLevel_007.ttcn | 51 + .../NegSem_060302_structured_types_009.ttcn | 2 +- .../Sem_060302_structured_types_002.ttcn | 4 +- .../NegSem_060303_component_types_003.ttcn | 2 +- .../NegSem_060303_component_types_004.ttcn | 2 +- .../NegSem_060303_component_types_005.ttcn | 2 +- .../NegSem_060303_component_types_006.ttcn | 2 +- .../Sem_060303_component_types_003.ttcn | 2 +- .../Sem_060303_component_types_004.ttcn | 2 +- .../Sem_060303_component_types_005.ttcn | 2 +- .../Sem_060303_component_types_006.ttcn | 2 +- ...05_compatibility_of_anytype_types_001.ttcn | 59 + ...tibility_of_anytype_types_001_importB.ttcn | 28 + ...tibility_of_anytype_types_001_importC.ttcn | 29 + .../Sem_070101_ArithmeticOperators_051.ttcn | 7 +- .../Sem_070101_ArithmeticOperators_052.ttcn | 4 +- .../Sem_070101_ArithmeticOperators_053.ttcn | 4 +- .../Sem_070103_RelationalOperators_048.ttcn | 57 + .../Sem_070103_RelationalOperators_049.ttcn | 56 + .../Sem_070103_RelationalOperators_050.ttcn | 55 + .../07_toplevel/Sem_07_toplevel_002.ttcn | 4 +- .../07_toplevel/Sem_07_toplevel_003.ttcn | 4 +- .../07_toplevel/Sem_07_toplevel_004.ttcn | 4 +- .../07_toplevel/Sem_07_toplevel_005.ttcn | 4 +- .../07_toplevel/Sem_07_toplevel_007.ttcn | 55 + .../07_toplevel/Sem_07_toplevel_008.ttcn | 45 + .../07_toplevel/Sem_07_toplevel_009.ttcn | 48 + .../Syn_0801_DefinitionOfAModule_010.ttcn | 24 + .../NegSem_080201_ModuleParameters_001.ttcn | 49 + .../NegSem_080201_ModuleParameters_002.ttcn | 55 + .../NegSem_080201_ModuleParameters_003.ttcn | 47 + .../NegSem_080201_ModuleParameters_004.ttcn | 47 + .../NegSem_080201_ModuleParameters_005.ttcn | 42 + .../NegSem_080201_ModuleParameters_006.ttcn | 48 + .../NegSyn_080201_ModuleParameters_001.ttcn | 35 + .../NegSyn_080201_ModuleParameters_002.ttcn | 36 + .../NegSem_0901_Communication_ports_002.ttcn | 2 +- .../NegSem_1101_ValueVars_005.ttcn | 37 + .../Sem_1101_ValueVars_006.ttcn | 46 + .../NegSyn_1102_TemplateVars_002.ttcn | 39 + ...eferencingSignatureParameters_001_new.ttcn | 92 + .../NegSem_1508_TemplateRestrictions_036.ttcn | 2 +- .../NegSem_1508_TemplateRestrictions_043.ttcn | 2 +- .../NegSem_1509_MatchOperation_002.ttcn | 45 + .../NegSem_1509_MatchOperation_003.ttcn | 45 + .../Sem_1509_MatchOperation_011.ttcn | 53 + .../Sem_1509_MatchOperation_012.ttcn | 44 + .../Sem_1509_MatchOperation_013.ttcn | 44 + .../Sem_1509_MatchOperation_014.ttcn | 44 + .../Sem_1509_MatchOperation_015.ttcn | 44 + .../Sem_1509_MatchOperation_016.ttcn | 44 + ...tingTemplatesOfStringAndListTypes_015.ttcn | 47 + .../15_toplevel/NegSyn_15_TopLevel_001.ttcn | 35 + ...egSem_160102_predefined_functions_039.ttcn | 48 + ...egSem_160102_predefined_functions_040.ttcn | 48 + .../Sem_160102_predefined_functions_062.ttcn | 44 + .../Sem_160102_predefined_functions_093.ttcn | 49 + .../Sem_160102_predefined_functions_094.ttcn | 49 + .../Sem_160102_predefined_functions_095.ttcn | 53 + .../Sem_160102_predefined_functions_096.ttcn | 55 + .../Sem_160102_predefined_functions_097.ttcn | 46 + .../Sem_160102_predefined_functions_098.ttcn | 49 + .../Sem_160102_predefined_functions_099.ttcn | 58 + ...ng_functions_from_specific_places_005.ttcn | 59 + ...ng_functions_from_specific_places_006.ttcn | 63 + ...ng_functions_from_specific_places_007.ttcn | 66 + ...ng_functions_from_specific_places_008.ttcn | 61 + ...ng_functions_from_specific_places_009.ttcn | 65 + ...ng_functions_from_specific_places_010.ttcn | 65 + ...ng_functions_from_specific_places_011.ttcn | 58 + ...ng_functions_from_specific_places_012.ttcn | 58 + ...ng_functions_from_specific_places_013.ttcn | 62 + ...ng_functions_from_specific_places_014.ttcn | 64 + ...ng_functions_from_specific_places_015.ttcn | 63 + ...ng_functions_from_specific_places_016.ttcn | 62 + ...ng_functions_from_specific_places_017.ttcn | 57 + ...ng_functions_from_specific_places_018.ttcn | 57 + ...ng_functions_from_specific_places_019.ttcn | 58 + ...ng_functions_from_specific_places_020.ttcn | 58 + ...ng_functions_from_specific_places_021.ttcn | 66 + ...ng_functions_from_specific_places_022.ttcn | 71 + ...ng_functions_from_specific_places_023.ttcn | 72 + ...ng_functions_from_specific_places_024.ttcn | 73 + ...ng_functions_from_specific_places_025.ttcn | 72 + ...ng_functions_from_specific_places_026.ttcn | 73 + ...ng_functions_from_specific_places_027.ttcn | 57 + ...ng_functions_from_specific_places_028.ttcn | 56 + ...ng_functions_from_specific_places_029.ttcn | 57 + ...ng_functions_from_specific_places_030.ttcn | 59 + ...ng_functions_from_specific_places_031.ttcn | 59 + ...ng_functions_from_specific_places_032.ttcn | 56 + ...ng_functions_from_specific_places_033.ttcn | 57 + ...ng_functions_from_specific_places_034.ttcn | 58 + ...ng_functions_from_specific_places_035.ttcn | 58 + ...ng_functions_from_specific_places_036.ttcn | 58 + ...ng_functions_from_specific_places_037.ttcn | 58 + ...ng_functions_from_specific_places_038.ttcn | 65 + ...ng_functions_from_specific_places_039.ttcn | 56 + ...ng_functions_from_specific_places_040.ttcn | 59 + ...ng_functions_from_specific_places_041.ttcn | 62 + ...ng_functions_from_specific_places_042.ttcn | 62 + ...ng_functions_from_specific_places_043.ttcn | 55 + ...ng_functions_from_specific_places_044.ttcn | 60 + ...ng_functions_from_specific_places_045.ttcn | 61 + ...ng_functions_from_specific_places_046.ttcn | 61 + ...ng_functions_from_specific_places_047.ttcn | 66 + ...ng_functions_from_specific_places_048.ttcn | 69 + ...ng_functions_from_specific_places_049.ttcn | 65 + ...ng_functions_from_specific_places_050.ttcn | 69 + ...ng_functions_from_specific_places_051.ttcn | 69 + ...ng_functions_from_specific_places_052.ttcn | 66 + ...ng_functions_from_specific_places_053.ttcn | 66 + ...ng_functions_from_specific_places_054.ttcn | 66 + ...ng_functions_from_specific_places_055.ttcn | 67 + ...ng_functions_from_specific_places_056.ttcn | 67 + ...ng_functions_from_specific_places_057.ttcn | 66 + ...ng_functions_from_specific_places_058.ttcn | 61 + ...ng_functions_from_specific_places_059.ttcn | 62 + ...ng_functions_from_specific_places_060.ttcn | 63 + ...ng_functions_from_specific_places_061.ttcn | 63 + ...ng_functions_from_specific_places_062.ttcn | 71 + ...ng_functions_from_specific_places_063.ttcn | 76 + ...ng_functions_from_specific_places_064.ttcn | 77 + ...ng_functions_from_specific_places_065.ttcn | 78 + ...ng_functions_from_specific_places_066.ttcn | 77 + ...ng_functions_from_specific_places_067.ttcn | 78 + ...ng_functions_from_specific_places_068.ttcn | 62 + ...ng_functions_from_specific_places_069.ttcn | 60 + ...ng_functions_from_specific_places_070.ttcn | 61 + ...ng_functions_from_specific_places_071.ttcn | 63 + ...ng_functions_from_specific_places_072.ttcn | 63 + ...ng_functions_from_specific_places_073.ttcn | 60 + ...ng_functions_from_specific_places_074.ttcn | 61 + ...ng_functions_from_specific_places_075.ttcn | 62 + ...ng_functions_from_specific_places_076.ttcn | 62 + ...ng_functions_from_specific_places_077.ttcn | 62 + ...ng_functions_from_specific_places_078.ttcn | 63 + ...ng_functions_from_specific_places_079.ttcn | 68 + ...ng_functions_from_specific_places_080.ttcn | 60 + ...ng_functions_from_specific_places_081.ttcn | 62 + ...ng_functions_from_specific_places_082.ttcn | 66 + ...ng_functions_from_specific_places_083.ttcn | 66 + ...ng_functions_from_specific_places_084.ttcn | 59 + ...ng_functions_from_specific_places_085.ttcn | 64 + ...ng_functions_from_specific_places_086.ttcn | 65 + ...ng_functions_from_specific_places_087.ttcn | 60 + ...ng_functions_from_specific_places_088.ttcn | 65 + ...ng_functions_from_specific_places_089.ttcn | 69 + ...ng_functions_from_specific_places_090.ttcn | 68 + ...ng_functions_from_specific_places_091.ttcn | 68 + ...ng_functions_from_specific_places_092.ttcn | 68 + ...ng_functions_from_specific_places_093.ttcn | 65 + ...ng_functions_from_specific_places_094.ttcn | 65 + ...ng_functions_from_specific_places_095.ttcn | 65 + ...ng_functions_from_specific_places_096.ttcn | 65 + ...ng_functions_from_specific_places_097.ttcn | 65 + ...ng_functions_from_specific_places_098.ttcn | 65 + ...ng_functions_from_specific_places_099.ttcn | 60 + ...ng_functions_from_specific_places_100.ttcn | 60 + ...ng_functions_from_specific_places_101.ttcn | 61 + ...ng_functions_from_specific_places_102.ttcn | 61 + ...ng_functions_from_specific_places_103.ttcn | 69 + ...ng_functions_from_specific_places_104.ttcn | 74 + ...ng_functions_from_specific_places_105.ttcn | 75 + ...ng_functions_from_specific_places_106.ttcn | 76 + ...ng_functions_from_specific_places_107.ttcn | 75 + ...ng_functions_from_specific_places_108.ttcn | 76 + ...ng_functions_from_specific_places_109.ttcn | 60 + ...ng_functions_from_specific_places_110.ttcn | 60 + ...ng_functions_from_specific_places_111.ttcn | 60 + ...ng_functions_from_specific_places_112.ttcn | 61 + ...ng_functions_from_specific_places_113.ttcn | 62 + ...ng_functions_from_specific_places_114.ttcn | 59 + ...ng_functions_from_specific_places_115.ttcn | 60 + ...ng_functions_from_specific_places_116.ttcn | 61 + ...ng_functions_from_specific_places_117.ttcn | 61 + ...ng_functions_from_specific_places_118.ttcn | 61 + ...ng_functions_from_specific_places_119.ttcn | 61 + ...ng_functions_from_specific_places_120.ttcn | 67 + ...ng_functions_from_specific_places_121.ttcn | 59 + ...ng_functions_from_specific_places_122.ttcn | 61 + ...ng_functions_from_specific_places_123.ttcn | 65 + ...ng_functions_from_specific_places_124.ttcn | 66 + ...ng_functions_from_specific_places_125.ttcn | 58 + ...ng_functions_from_specific_places_126.ttcn | 63 + ...ng_functions_from_specific_places_127.ttcn | 64 + ...ng_functions_from_specific_places_128.ttcn | 61 + ...ng_functions_from_specific_places_129.ttcn | 61 + ...ng_functions_from_specific_places_130.ttcn | 64 + ...ng_functions_from_specific_places_131.ttcn | 69 + ...ng_functions_from_specific_places_132.ttcn | 72 + ...ng_functions_from_specific_places_133.ttcn | 72 + ...ng_functions_from_specific_places_134.ttcn | 72 + ...ng_functions_from_specific_places_135.ttcn | 72 + ...ng_functions_from_specific_places_136.ttcn | 69 + ...ng_functions_from_specific_places_137.ttcn | 69 + ...ng_functions_from_specific_places_138.ttcn | 69 + ...ng_functions_from_specific_places_139.ttcn | 69 + ...ng_functions_from_specific_places_140.ttcn | 70 + ...ng_functions_from_specific_places_141.ttcn | 70 + ...ng_functions_from_specific_places_142.ttcn | 65 + ...ng_functions_from_specific_places_143.ttcn | 64 + ...ng_functions_from_specific_places_144.ttcn | 65 + ...ng_functions_from_specific_places_145.ttcn | 65 + ...ng_functions_from_specific_places_146.ttcn | 73 + ...ng_functions_from_specific_places_147.ttcn | 78 + ...ng_functions_from_specific_places_148.ttcn | 79 + ...ng_functions_from_specific_places_149.ttcn | 80 + ...ng_functions_from_specific_places_150.ttcn | 79 + ...ng_functions_from_specific_places_151.ttcn | 80 + ...ng_functions_from_specific_places_152.ttcn | 64 + ...ng_functions_from_specific_places_153.ttcn | 64 + ...ng_functions_from_specific_places_154.ttcn | 64 + ...ng_functions_from_specific_places_155.ttcn | 65 + ...ng_functions_from_specific_places_156.ttcn | 66 + ...ng_functions_from_specific_places_157.ttcn | 63 + ...ng_functions_from_specific_places_158.ttcn | 64 + ...ng_functions_from_specific_places_159.ttcn | 65 + ...ng_functions_from_specific_places_160.ttcn | 65 + ...ng_functions_from_specific_places_161.ttcn | 65 + ...ng_functions_from_specific_places_162.ttcn | 65 + ...ng_functions_from_specific_places_163.ttcn | 71 + ...ng_functions_from_specific_places_164.ttcn | 63 + ...ng_functions_from_specific_places_165.ttcn | 65 + ...ng_functions_from_specific_places_166.ttcn | 69 + ...ng_functions_from_specific_places_167.ttcn | 70 + ...ng_functions_from_specific_places_168.ttcn | 62 + ...ng_functions_from_specific_places_169.ttcn | 67 + ...ng_functions_from_specific_places_170.ttcn | 68 + ...ng_functions_from_specific_places_171.ttcn | 65 + ...ng_functions_from_specific_places_172.ttcn | 65 + ...ng_functions_from_specific_places_173.ttcn | 58 + ...ng_functions_from_specific_places_174.ttcn | 63 + ...ng_functions_from_specific_places_175.ttcn | 66 + ...ng_functions_from_specific_places_176.ttcn | 66 + ...ng_functions_from_specific_places_177.ttcn | 66 + ...ng_functions_from_specific_places_178.ttcn | 66 + ...ng_functions_from_specific_places_179.ttcn | 63 + ...ng_functions_from_specific_places_180.ttcn | 63 + ...ng_functions_from_specific_places_181.ttcn | 61 + ...ng_functions_from_specific_places_182.ttcn | 61 + ...ng_functions_from_specific_places_183.ttcn | 61 + ...ng_functions_from_specific_places_184.ttcn | 61 + ...ng_functions_from_specific_places_185.ttcn | 58 + ...ng_functions_from_specific_places_186.ttcn | 58 + ...ng_functions_from_specific_places_187.ttcn | 59 + ...ng_functions_from_specific_places_188.ttcn | 59 + ...ng_functions_from_specific_places_189.ttcn | 67 + ...ng_functions_from_specific_places_190.ttcn | 72 + ...ng_functions_from_specific_places_191.ttcn | 73 + ...ng_functions_from_specific_places_192.ttcn | 74 + ...ng_functions_from_specific_places_193.ttcn | 73 + ...ng_functions_from_specific_places_194.ttcn | 74 + ...ng_functions_from_specific_places_195.ttcn | 58 + ...ng_functions_from_specific_places_196.ttcn | 58 + ...ng_functions_from_specific_places_197.ttcn | 58 + ...ng_functions_from_specific_places_198.ttcn | 59 + ...ng_functions_from_specific_places_199.ttcn | 60 + ...ng_functions_from_specific_places_200.ttcn | 57 + ...ng_functions_from_specific_places_201.ttcn | 59 + ...ng_functions_from_specific_places_202.ttcn | 60 + ...ng_functions_from_specific_places_203.ttcn | 59 + ...ng_functions_from_specific_places_204.ttcn | 60 + ...ng_functions_from_specific_places_205.ttcn | 59 + ...ng_functions_from_specific_places_206.ttcn | 59 + ...ng_functions_from_specific_places_207.ttcn | 64 + ...ng_functions_from_specific_places_208.ttcn | 63 + ...ng_functions_from_specific_places_209.ttcn | 61 + ...ng_functions_from_specific_places_210.ttcn | 62 + ...ng_functions_from_specific_places_211.ttcn | 58 + ...ng_functions_from_specific_places_212.ttcn | 60 + ...ng_functions_from_specific_places_213.ttcn | 65 + ...ng_functions_from_specific_places_214.ttcn | 68 + ...ng_functions_from_specific_places_215.ttcn | 68 + ...ng_functions_from_specific_places_216.ttcn | 68 + ...ng_functions_from_specific_places_217.ttcn | 68 + ...ng_functions_from_specific_places_218.ttcn | 65 + ...ng_functions_from_specific_places_219.ttcn | 65 + ...ng_functions_from_specific_places_220.ttcn | 65 + ...ng_functions_from_specific_places_221.ttcn | 65 + ...ng_functions_from_specific_places_222.ttcn | 65 + ...ng_functions_from_specific_places_223.ttcn | 65 + ...ng_functions_from_specific_places_224.ttcn | 60 + ...ng_functions_from_specific_places_225.ttcn | 60 + ...ng_functions_from_specific_places_226.ttcn | 61 + ...ng_functions_from_specific_places_227.ttcn | 61 + ...ng_functions_from_specific_places_228.ttcn | 69 + ...ng_functions_from_specific_places_229.ttcn | 74 + ...ng_functions_from_specific_places_230.ttcn | 75 + ...ng_functions_from_specific_places_231.ttcn | 76 + ...ng_functions_from_specific_places_232.ttcn | 75 + ...ng_functions_from_specific_places_233.ttcn | 76 + ...ng_functions_from_specific_places_234.ttcn | 60 + ...ng_functions_from_specific_places_235.ttcn | 60 + ...ng_functions_from_specific_places_236.ttcn | 60 + ...ng_functions_from_specific_places_237.ttcn | 61 + ...ng_functions_from_specific_places_238.ttcn | 62 + ...ng_functions_from_specific_places_239.ttcn | 59 + ...ng_functions_from_specific_places_240.ttcn | 60 + ...ng_functions_from_specific_places_241.ttcn | 61 + ...ng_functions_from_specific_places_242.ttcn | 61 + ...ng_functions_from_specific_places_243.ttcn | 61 + ...ng_functions_from_specific_places_244.ttcn | 61 + ...ng_functions_from_specific_places_245.ttcn | 67 + ...ng_functions_from_specific_places_246.ttcn | 59 + ...ng_functions_from_specific_places_247.ttcn | 61 + ...ng_functions_from_specific_places_248.ttcn | 65 + ...ng_functions_from_specific_places_249.ttcn | 65 + ...ng_functions_from_specific_places_250.ttcn | 58 + ...ng_functions_from_specific_places_251.ttcn | 63 + ...ng_functions_from_specific_places_252.ttcn | 64 + ...ng_functions_from_specific_places_253.ttcn | 60 + ...ng_functions_from_specific_places_254.ttcn | 60 + ...ng_functions_from_specific_places_255.ttcn | 61 + ...ng_functions_from_specific_places_256.ttcn | 66 + ...ng_functions_from_specific_places_257.ttcn | 69 + ...ng_functions_from_specific_places_258.ttcn | 69 + ...ng_functions_from_specific_places_259.ttcn | 69 + ...ng_functions_from_specific_places_260.ttcn | 69 + ...ng_functions_from_specific_places_261.ttcn | 66 + ...ng_functions_from_specific_places_262.ttcn | 66 + ...ng_functions_from_specific_places_263.ttcn | 66 + ...ng_functions_from_specific_places_264.ttcn | 66 + ...ng_functions_from_specific_places_265.ttcn | 66 + ...ng_functions_from_specific_places_266.ttcn | 66 + ...ng_functions_from_specific_places_267.ttcn | 61 + ...ng_functions_from_specific_places_268.ttcn | 61 + ...ng_functions_from_specific_places_269.ttcn | 62 + ...ng_functions_from_specific_places_270.ttcn | 62 + ...ng_functions_from_specific_places_271.ttcn | 70 + ...ng_functions_from_specific_places_272.ttcn | 75 + ...ng_functions_from_specific_places_273.ttcn | 76 + ...ng_functions_from_specific_places_274.ttcn | 77 + ...ng_functions_from_specific_places_275.ttcn | 76 + ...ng_functions_from_specific_places_276.ttcn | 77 + ...ng_functions_from_specific_places_277.ttcn | 61 + ...ng_functions_from_specific_places_278.ttcn | 61 + ...ng_functions_from_specific_places_279.ttcn | 61 + ...ng_functions_from_specific_places_280.ttcn | 62 + ...ng_functions_from_specific_places_281.ttcn | 63 + ...ng_functions_from_specific_places_282.ttcn | 60 + ...ng_functions_from_specific_places_283.ttcn | 61 + ...ng_functions_from_specific_places_284.ttcn | 63 + ...ng_functions_from_specific_places_285.ttcn | 62 + ...ng_functions_from_specific_places_286.ttcn | 62 + ...ng_functions_from_specific_places_287.ttcn | 62 + ...ng_functions_from_specific_places_288.ttcn | 68 + ...ng_functions_from_specific_places_289.ttcn | 60 + ...ng_functions_from_specific_places_290.ttcn | 63 + ...ng_functions_from_specific_places_291.ttcn | 66 + ...ng_functions_from_specific_places_292.ttcn | 66 + ...ng_functions_from_specific_places_293.ttcn | 59 + ...ng_functions_from_specific_places_294.ttcn | 64 + ...ng_functions_from_specific_places_295.ttcn | 65 + ...ng_functions_from_specific_places_296.ttcn | 61 + ...ng_functions_from_specific_places_297.ttcn | 61 + ...king_functions_from_specific_places_038.cc | 17 + ...king_functions_from_specific_places_079.cc | 17 + ...king_functions_from_specific_places_120.cc | 17 + ...king_functions_from_specific_places_163.cc | 17 + ...king_functions_from_specific_places_245.cc | 17 + ...king_functions_from_specific_places_288.cc | 17 + .../NegSem_1602_toplevel_007.ttcn | 54 + .../1602_toplevel/Sem_1602_toplevel_002.ttcn | 54 + .../1602_toplevel/Sem_1602_toplevel_003.ttcn | 58 + .../Sem_190301_select_case_statement_005.ttcn | 52 + .../Sem_190301_select_case_statement_006.ttcn | 51 + ...Sem_190302_select_union_statement_006.ttcn | 58 + ...Sem_190302_select_union_statement_007.ttcn | 59 + .../NegSem_2002_TheAltStatement_002.ttcn | 8 +- .../NegSem_2002_TheAltStatement_003.ttcn | 8 +- .../NegSem_2002_TheAltStatement_004.ttcn | 8 +- .../NegSem_2002_TheAltStatement_005.ttcn | 8 +- .../NegSem_2002_TheAltStatement_006.ttcn | 8 +- .../NegSem_2002_TheAltStatement_007.ttcn | 9 +- .../NegSem_2002_TheAltStatement_008.ttcn | 9 +- .../NegSem_2002_TheAltStatement_009.ttcn | 9 +- .../NegSem_2002_TheAltStatement_010.ttcn | 9 +- .../NegSem_2002_TheAltStatement_011.ttcn | 9 +- .../NegSem_2002_TheAltStatement_012.ttcn | 7 +- .../NegSem_2002_TheAltStatement_013.ttcn | 7 +- .../NegSem_2002_TheAltStatement_014.ttcn | 7 +- .../NegSem_2002_TheAltStatement_015.ttcn | 7 +- .../NegSem_2002_TheAltStatement_016.ttcn | 7 +- .../NegSem_2002_TheAltStatement_017.ttcn | 58 + .../NegSem_2002_TheAltStatement_018.ttcn | 63 + .../NegSem_2002_TheAltStatement_019.ttcn | 66 + .../NegSem_2002_TheAltStatement_020.ttcn | 66 + .../NegSem_2002_TheAltStatement_021.ttcn | 66 + .../NegSem_2002_TheAltStatement_022.ttcn | 66 + .../NegSem_2002_TheAltStatement_023.ttcn | 63 + .../NegSem_2002_TheAltStatement_024.ttcn | 63 + .../NegSem_2002_TheAltStatement_025.ttcn | 60 + .../NegSem_2002_TheAltStatement_026.ttcn | 60 + .../NegSem_2002_TheAltStatement_027.ttcn | 60 + .../NegSem_2002_TheAltStatement_028.ttcn | 60 + .../NegSem_2002_TheAltStatement_029.ttcn | 58 + .../NegSem_2002_TheAltStatement_030.ttcn | 58 + .../NegSem_2002_TheAltStatement_031.ttcn | 59 + .../NegSem_2002_TheAltStatement_032.ttcn | 59 + .../NegSem_2002_TheAltStatement_033.ttcn | 67 + .../NegSem_2002_TheAltStatement_034.ttcn | 72 + .../NegSem_2002_TheAltStatement_035.ttcn | 73 + .../NegSem_2002_TheAltStatement_036.ttcn | 74 + .../NegSem_2002_TheAltStatement_037.ttcn | 73 + .../NegSem_2002_TheAltStatement_038.ttcn | 74 + .../NegSem_2002_TheAltStatement_039.ttcn | 58 + .../NegSem_2002_TheAltStatement_040.ttcn | 58 + .../NegSem_2002_TheAltStatement_041.ttcn | 58 + .../NegSem_2002_TheAltStatement_042.ttcn | 59 + .../NegSem_2002_TheAltStatement_043.ttcn | 60 + .../NegSem_2002_TheAltStatement_044.ttcn | 58 + .../NegSem_2002_TheAltStatement_045.ttcn | 59 + .../NegSem_2002_TheAltStatement_046.ttcn | 60 + .../NegSem_2002_TheAltStatement_047.ttcn | 60 + .../NegSem_2002_TheAltStatement_048.ttcn | 60 + .../NegSem_2002_TheAltStatement_049.ttcn | 60 + .../NegSem_2002_TheAltStatement_050.ttcn | 64 + .../NegSem_2002_TheAltStatement_051.ttcn | 58 + .../NegSem_2002_TheAltStatement_052.ttcn | 59 + .../NegSem_2002_TheAltStatement_053.ttcn | 63 + .../NegSem_2002_TheAltStatement_054.ttcn | 63 + .../NegSem_2002_TheAltStatement_055.ttcn | 58 + .../NegSem_2002_TheAltStatement_056.ttcn | 62 + .../NegSem_2002_TheAltStatement_057.ttcn | 63 + .../NegSem_2002_TheAltStatement_058.ttcn | 59 + .../NegSem_2002_TheAltStatement_059.ttcn | 59 + .../NegSem_2002_TheAltStatement_060.ttcn | 57 + .../NegSem_2002_TheAltStatement_061.ttcn | 54 + .../NegSem_2002_TheAltStatement_062.ttcn | 56 + .../NegSem_2002_TheAltStatement_063.ttcn | 53 + .../NegSem_2002_TheAltStatement_064.ttcn | 56 + .../NegSem_2002_TheAltStatement_065.ttcn | 54 + .../NegSem_2002_TheAltStatement_066.ttcn | 53 + .../NegSem_2002_TheAltStatement_067.ttcn | 60 + .../NegSem_2002_TheAltStatement_068.ttcn | 56 + .../NegSem_2002_TheAltStatement_069.ttcn | 53 + .../NegSem_2002_TheAltStatement_070.ttcn | 59 + .../NegSem_2002_TheAltStatement_071.ttcn | 58 + .../NegSem_2002_TheAltStatement_072.ttcn | 60 + .../NegSem_2002_TheAltStatement_073.ttcn | 54 + .../NegSem_2002_TheAltStatement_074.ttcn | 60 + .../NegSem_2002_TheAltStatement_075.ttcn | 57 + .../NegSem_2002_TheAltStatement_076.ttcn | 54 + .../NegSem_2002_TheAltStatement_077.ttcn | 56 + .../NegSem_2002_TheAltStatement_078.ttcn | 56 + .../NegSem_2002_TheAltStatement_079.ttcn | 59 + .../NegSem_2002_TheAltStatement_080.ttcn | 57 + .../NegSem_2002_TheAltStatement_081.ttcn | 65 + .../NegSem_2002_TheAltStatement_082.ttcn | 60 + .../NegSem_2002_TheAltStatement_083.ttcn | 57 + .../NegSem_2002_TheAltStatement_084.ttcn | 59 + .../NegSem_2002_TheAltStatement_085.ttcn | 59 + .../NegSem_2002_TheAltStatement_086.ttcn | 62 + .../xf_NegSem_2002_TheAltStatement_050.cc | 17 + ...210101_connect_and_map_operations_001.ttcn | 2 +- ...210101_connect_and_map_operations_005.ttcn | 2 +- ...210101_connect_and_map_operations_006.ttcn | 4 +- ...210101_connect_and_map_operations_009.ttcn | 18 +- ...2_disconnect_and_unmap_operations_011.ttcn | 18 +- .../Sem_210102_disconnect_operation_001.ttcn | 18 +- .../Sem_210102_disconnect_operation_002.ttcn | 18 +- .../Sem_210102_unmap_operation_001.ttcn | 18 +- .../Sem_210102_unmap_operation_002.ttcn | 18 +- .../Sem_210302_Start_test_component_011.ttcn | 55 + .../Sem_210302_Start_test_component_012.ttcn | 57 + .../Sem_210302_Start_test_component_013.ttcn | 46 + .../Sem_210302_Start_test_component_014.ttcn | 52 + .../Sem_210303_Stop_test_component_005.ttcn | 3 + .../NegSem_210305_alive_operation_002.ttcn | 4 +- .../NegSem_210305_alive_operation_003.ttcn | 4 +- .../NegSem_210305_alive_operation_004.ttcn | 4 +- .../NegSem_210305_alive_operation_005.ttcn | 4 +- .../Sem_210305_alive_operation_009.ttcn | 4 +- .../Sem_210305_alive_operation_010.ttcn | 4 +- .../Sem_210305_alive_operation_011.ttcn | 4 +- .../Sem_210305_alive_operation_013.ttcn | 4 +- .../Sem_210305_alive_operation_014.ttcn | 4 +- .../Sem_210305_alive_operation_015.ttcn | 42 + .../Sem_210306_running_operation_013.ttcn | 48 + .../NegSem_220201_SendOperation_008.ttcn | 5 +- .../NegSem_220201_SendOperation_009.ttcn | 3 +- .../NegSem_220201_SendOperation_010.ttcn | 3 +- .../Sem_220202_ReceiveOperation_030.ttcn | 56 + .../NegSem_220203_TriggerOperation_024.ttcn | 58 + .../Sem_220203_TriggerOperation_006.ttcn | 7 +- .../Sem_220203_TriggerOperation_007.ttcn | 7 +- .../Sem_220203_TriggerOperation_008.ttcn | 7 +- .../NegSem_220301_CallOperation_003.ttcn | 3 +- .../NegSem_220301_CallOperation_004.ttcn | 3 +- .../NegSem_220301_CallOperation_005.ttcn | 50 + .../NegSem_220301_CallOperation_006.ttcn | 63 + .../NegSem_220301_CallOperation_007.ttcn | 51 + .../NegSem_220301_CallOperation_008.ttcn | 51 + .../NegSem_220301_CallOperation_009.ttcn | 51 + .../NegSem_220301_CallOperation_010.ttcn | 51 + .../NegSem_220301_CallOperation_011.ttcn | 51 + .../NegSem_220301_CallOperation_012.ttcn | 66 + .../NegSem_220301_CallOperation_013.ttcn | 56 + .../NegSem_220301_CallOperation_014.ttcn | 58 + .../NegSem_220301_CallOperation_015.ttcn | 58 + .../NegSem_220301_CallOperation_016.ttcn | 61 + .../NegSem_220301_CallOperation_017.ttcn | 64 + .../NegSem_220301_CallOperation_018.ttcn | 57 + .../NegSem_220301_CallOperation_019.ttcn | 57 + .../NegSem_220301_CallOperation_020.ttcn | 45 + .../NegSyn_220301_CallOperation_001.ttcn | 55 + .../NegSyn_220301_CallOperation_002.ttcn | 59 + .../Sem_220301_CallOperation_005.ttcn | 20 +- .../Sem_220301_CallOperation_006.ttcn | 22 +- .../Sem_220301_CallOperation_007.ttcn | 17 +- .../Sem_220301_CallOperation_009.ttcn | 67 + .../Sem_220301_CallOperation_010.ttcn | 54 + .../Sem_220301_CallOperation_011.ttcn | 65 + .../Sem_220301_CallOperation_012.ttcn | 70 + .../Sem_220301_CallOperation_013.ttcn | 83 + .../Sem_220301_CallOperation_014.ttcn | 81 + .../Sem_220301_CallOperation_015.ttcn | 70 + .../Sem_220301_CallOperation_016.ttcn | 74 + .../Sem_220301_CallOperation_017.ttcn | 58 + .../Sem_220301_CallOperation_018.ttcn | 50 + .../Sem_220301_CallOperation_019.ttcn | 50 + .../Sem_220301_CallOperation_020.ttcn | 62 + .../Sem_220301_CallOperation_021.ttcn | 61 + .../NegSem_220302_GetcallOperation_009.ttcn | 3 +- .../NegSem_220302_GetcallOperation_010.ttcn | 3 +- .../NegSem_220302_GetcallOperation_017.ttcn | 2 +- .../NegSem_220302_GetcallOperation_018.ttcn | 58 + .../NegSem_220302_GetcallOperation_019.ttcn | 65 + .../Sem_220302_GetcallOperation_020.ttcn | 67 + .../Sem_220302_GetcallOperation_021.ttcn | 67 + .../Sem_220302_GetcallOperation_022.ttcn | 65 + .../NegSem_220303_ReplyOperation_002.ttcn | 3 +- .../NegSem_220303_ReplyOperation_003.ttcn | 3 +- .../NegSem_220303_ReplyOperation_004.ttcn | 46 + .../NegSem_220303_ReplyOperation_005.ttcn | 60 + .../NegSem_220303_ReplyOperation_006.ttcn | 65 + .../NegSem_220303_ReplyOperation_007.ttcn | 65 + .../NegSem_220303_ReplyOperation_008.ttcn | 92 + .../NegSem_220303_ReplyOperation_009.ttcn | 61 + .../NegSem_220303_ReplyOperation_010.ttcn | 60 + .../Sem_220303_ReplyOperation_003.ttcn | 63 + .../Sem_220303_ReplyOperation_004.ttcn | 67 + .../Sem_220303_ReplyOperation_005.ttcn | 65 + .../NegSem_220304_getreply_operation_006.ttcn | 3 +- .../NegSem_220304_getreply_operation_007.ttcn | 3 +- .../NegSem_220304_getreply_operation_021.ttcn | 59 + .../NegSem_220304_getreply_operation_022.ttcn | 64 + .../Sem_220304_getreply_operation_021.ttcn | 70 + .../Sem_220304_getreply_operation_022.ttcn | 70 + .../Sem_220304_getreply_operation_023.ttcn | 67 + .../NegSem_220305_raise_operation_001.ttcn | 8 +- .../NegSem_220305_raise_operation_002.ttcn | 8 +- .../NegSem_220305_raise_operation_003.ttcn | 8 +- .../NegSem_220305_raise_operation_007.ttcn | 6 +- .../NegSem_220305_raise_operation_008.ttcn | 4 +- .../NegSem_220305_raise_operation_010.ttcn | 53 + .../NegSem_220306_catch_operation_006.ttcn | 3 +- .../NegSem_220306_catch_operation_007.ttcn | 3 +- .../NegSem_220306_catch_operation_015.ttcn | 61 + .../NegSem_220306_catch_operation_016.ttcn | 64 + .../Sem_220306_catch_operation_015.ttcn | 72 + .../Sem_220306_catch_operation_016.ttcn | 72 + .../Sem_220306_catch_operation_017.ttcn | 69 + .../NegSem_2204_the_check_operation_004.ttcn | 53 + .../NegSem_2204_the_check_operation_005.ttcn | 52 + .../Sem_2302_timer_start_001.ttcn | 2 +- .../Sem_2302_timer_start_002.ttcn | 2 +- .../Sem_2302_timer_start_003.ttcn | 2 +- .../Sem_2302_timer_start_004.ttcn | 2 +- .../Sem_2601_ExecuteStatement_010.ttcn | 53 + .../NegSem_2707_OptionalAttributes_001.ttcn | 109 + .../NegSem_B010201_value_list_001.ttcn | 63 + .../NegSem_B010201_value_list_002.ttcn | 62 + .../NegSem_B010201_value_list_003.ttcn | 62 + .../NegSem_B010201_value_list_004.ttcn | 71 + .../Sem_B010201_value_list_002.ttcn | 61 + .../Sem_B010201_value_list_003.ttcn | 61 + .../Sem_B010201_value_list_004.ttcn | 71 + ...m_B010202_complemented_value_list_007.ttcn | 2 +- .../Sem_B010204_any_value_or_none_004.ttcn | 52 + .../Sem_B010204_any_value_or_none_005.ttcn | 52 + .../NegSem_B010208_omit_value_003.ttcn | 17 +- ...Sem_B010210_enumerated_value_list_001.ttcn | 67 + ...egSem_B010401_length_restrictions_001.ttcn | 14 +- ...egSem_B010401_length_restrictions_002.ttcn | 39 +- .../Sem_B010401_length_restrictions_003.ttcn | 83 + .../Sem_B010401_length_restrictions_004.ttcn | 76 + .../Sem_D05_macro_scope_001.ttcn | 24 +- .../positive_tests/README.txt | 21 +- .../positive_tests/pos_conf_tests.cfg | 59 + .../positive_tests/pos_conf_tests.tpd | 611 +- usrguide/SoC_TITAN.docx | Bin 391307 -> 427141 bytes 752 files changed, 45604 insertions(+), 3583 deletions(-) create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_018.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_019.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_006.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_012.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_008.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importB.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importC.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001_new.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn create mode 100755 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_038.cc create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_079.cc create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_120.cc create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_163.cc create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_245.cc create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_288.cc create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/xf_NegSem_2002_TheAltStatement_050.cc create mode 100644 conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_021.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_018.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_019.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_020.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_021.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_022.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_004.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_005.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn create mode 100644 conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn diff --git a/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script b/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script index 1947562d1..c66fd0c05 100644 --- a/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script +++ b/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script @@ -2861,898 +2861,3190 @@ error: at or before token `@fuzzy': syntax error, unexpected FuzzyKeyword <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_05040103_parameters_of_kind_timer_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040103_001 Verify that functions with timer parameters cannot be used in component.start operation > + +<COMPILE> + +<MODULE TTCN NegSem_05040103_parameters_of_kind_timer_001 05040103_parameters_of_kind_timer_001.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that functions with timer parameters cannot be used in component.start operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040103_parameters_of_kind_timer_001 { + + type component C { + } + + function f_test(inout timer p_tmr) runs on C { + p_tmr.timeout; + setverdict(pass); + } + + testcase TC_NegSem_05040103_parameters_of_kind_timer_001() runs on C system C { + timer t_tmr := 0.1; + var C v_ptc := C.create; + t_tmr.start; + v_ptc.start(f_test(t_tmr)); + v_ptc.done; + } + + control { + execute(TC_NegSem_05040103_parameters_of_kind_timer_001()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Function `@NegSem_05040103_parameters_of_kind_timer_001.f_test' cannot be started on a parallel test component because it has timer parameter `p_tmr' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_05040103_parameters_of_kind_timer_003 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040103_003 Verify that test cases cannot have timer parameters > + +<COMPILE> + +<MODULE TTCN NegSem_05040103_parameters_of_kind_timer_003 05040103_parameters_of_kind_timer_003.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that test cases cannot have timer parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040103_parameters_of_kind_timer_003 { + + type component C { + } + + testcase TC_NegSem_05040103_parameters_of_kind_timer_003(timer p_tmr) runs on C { + p_tmr.timeout; + setverdict(pass); + } + + control { + timer t_tmr := 0.1; + t_tmr.start; + execute(TC_NegSem_05040103_parameters_of_kind_timer_003(t_tmr)); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `timer': syntax error, unexpected TimerKeyword +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_05040103_parameters_of_kind_timer_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040103_004 Verify that templates cannot have timer parameters > + +<COMPILE> + +<MODULE TTCN NegSem_05040103_parameters_of_kind_timer_004 05040103_parameters_of_kind_timer_004.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that templates cannot have timer parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040103_parameters_of_kind_timer_004 { + + type component C { + } + + template boolean m_msg (timer p_tmr) := p_tmr.running; + + testcase TC_NegSem_05040103_parameters_of_kind_timer_004() runs on C system C { + timer t_tmr := 0.1; + t_tmr.start; + log(m_msg(t_tmr)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040103_parameters_of_kind_timer_004()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `timer': syntax error, unexpected TimerKeyword +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_05040103_parameters_of_kind_timer_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040103_001 Verify that in timer parameters are not allowed > + +<COMPILE> + +<MODULE TTCN NegSyn_05040103_parameters_of_kind_timer_001 NegSyn_05040103_parameters_of_kind_timer_001.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that in timer parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal timer parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSyn_05040103_parameters_of_kind_timer_001 { + + type component C { + } + + function f_test(in timer p_tmr) { + p_tmr.timeout; + } + + testcase TC_NegSyn_05040103_parameters_of_kind_timer_001() runs on C { + timer t_tmr := 1.0; + t_tmr.start; + f_test(t_tmr); + setverdict(pass); + } + + control { + execute(TC_NegSyn_05040103_parameters_of_kind_timer_001()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `timer': syntax error, unexpected TimerKeyword +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_05040103_parameters_of_kind_timer_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040103_002 Verify that out timer parameters are not allowed > + +<COMPILE> + +<MODULE TTCN NegSyn_05040103_parameters_of_kind_timer_002 NegSyn_05040103_parameters_of_kind_timer_002.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that out timer parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal timer parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSyn_05040103_parameters_of_kind_timer_002 { + + type component C { + + } + + function f_test(out timer p_tmr) { + + p_tmr.start(1.0); + + } + + testcase TC_NegSyn_05040103_parameters_of_kind_timer_002() runs on C{ + + timer t_tmr; + + f_test(t_tmr); + + t_tmr.timeout; + setverdict(pass); + + } + + + control { + + execute(TC_NegSyn_05040103_parameters_of_kind_timer_002()); + + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `timer': syntax error, unexpected TimerKeyword +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_05040104_parameters_of_kind_port_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040104_001 Verify that functions with port parameters cannot be used in component.start operation > + +<COMPILE> + +<MODULE TTCN NegSem_05040104_parameters_of_kind_port_001 NegSem_05040104_parameters_of_kind_port_001.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that functions with port parameters cannot be used in component.start operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal port parameters, - with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040104_parameters_of_kind_port_001 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + function f_test(P p_port) runs on C { + p_port.send(1); + setverdict(pass); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_001() runs on C system C { + var C v_ptc := C.create; + connect(mtc:p,v_ptc:p); + v_ptc.start(f_test(p)); + v_ptc.done; + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_001()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Function `@NegSem_05040104_parameters_of_kind_port_001.f_test' cannot be started on a parallel test component because it has port parameter `p_port' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_05040104_parameters_of_kind_port_003 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040104_003 Verify that in port parameters are not allowed > + +<COMPILE> + +<MODULE TTCN NegSem_05040104_parameters_of_kind_port_003 NegSem_05040104_parameters_of_kind_port_003.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that in port parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal port parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSem_05040104_parameters_of_kind_port_003 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + function f_test(in P p_port) { + p_port.send(1); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_003() runs on C { + connect(self:p,self:p); + f_test(p); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_003()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Port type `@NegSem_05040104_parameters_of_kind_port_003.P' cannot be used as value parameter +<END_RESULT> +<RESULT COUNT 1> +error: Reference to a port or port parameter was expected instead of value parameter `p_port' +<END_RESULT> +<RESULT COUNT 1> +error: Reference to a value was expected instead of port `@NegSem_05040104_parameters_of_kind_port_003.C.p' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_05040104_parameters_of_kind_port_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040104_004 Verify that out port parameters are not allowed > + +<COMPILE> + +<MODULE TTCN NegSem_05040104_parameters_of_kind_port_004 NegSem_05040104_parameters_of_kind_port_004.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that out port parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal port parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSem_05040104_parameters_of_kind_port_004 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + function f_test(out P p_port) { + setverdict(pass); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_004() runs on C { + connect(self:p,self:p); + f_test(p); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_004()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Port type `@NegSem_05040104_parameters_of_kind_port_004.P' cannot be used as `out' value parameter +<END_RESULT> +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `out' value parameter instead of port `@NegSem_05040104_parameters_of_kind_port_004.C.p' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_05040104_parameters_of_kind_port_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040104_005 Verify that test cases cannot have port parameters > + +<COMPILE> + +<MODULE TTCN NegSem_05040104_parameters_of_kind_port_005 NegSem_05040104_parameters_of_kind_port_005.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that test cases cannot have port parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal port parameters, - with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040104_parameters_of_kind_port_005 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + testcase TC_Test(P p_port) runs on C { // should cause a compilation error + p_port.send(1); + setverdict(pass); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_005(P p_port) runs on C { + connect(self:p,self:p); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_005()); + } +} +<END_MODULE> + +<RESULT COUNT 2> +error: A testcase cannot have port parameter +<END_RESULT> +<RESULT COUNT 1> +error: Too few parameters: 1 was expected instead of 0 +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_05040104_parameters_of_kind_port_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 05040104_006 Verify that templates cannot contain port parameters > + +<COMPILE> + +<MODULE TTCN NegSem_05040104_parameters_of_kind_port_006 NegSem_05040104_parameters_of_kind_port_006.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that templates cannot contain port parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal port parameters, - with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040104_parameters_of_kind_port_006 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + template boolean m_msg(P p_par) := p_par.checkstate("Started"); + + testcase TC_NegSem_05040104_parameters_of_kind_port_006() runs on C system C { + log(m_msg(p)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_006()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: A template cannot have port parameter +<END_RESULT> +<RESULT COUNT 1> +error: Operation `port.checkstate\(\)' is allowed only within statements +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_050402_actual_parameters_001 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_001 verify that template parameters cannot be used as in formal value parameters of functions > +<TC - 050402_001 verify that template parameters cannot be used as in formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_001 NegSem_050402_actual_parameters_001.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_001 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + function f_test(in integer p_val) { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_001() runs on GeneralComp { + f_test(m_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_001()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_001.m_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_002 verify that template variables cannot be used as in formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_002 NegSem_050402_actual_parameters_002.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_002 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_002() runs on GeneralComp { + var template integer vm_msg := 2; + f_test(vm_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_002()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template variable `vm_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_003 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_003 verify that template in parameters cannot be used as in formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_003 NegSem_050402_actual_parameters_003.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters cannot be used as in formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_003 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_003() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_003()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_004 verify that template out parameters cannot be used as in formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_004 NegSem_050402_actual_parameters_004.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_004 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out template integer p_val) { + p_val := 4; // out parameter shall have a value before we can pass it to a function + f_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_004() runs on GeneralComp { + var template integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_004()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `out' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_005 verify that template inout parameters cannot be used as in formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_005 NegSem_050402_actual_parameters_005.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_005 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_005() runs on GeneralComp { + var template integer v_val := 5; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_005()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `inout' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_006 verify that template parameters cannot be used as in formal value parameters of templates > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_006 NegSem_050402_actual_parameters_006.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of templates + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_006 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + template integer m_test(in integer p_val) := 5 + p_val; + + testcase TC_NegSem_050402_actual_parameters_006() runs on GeneralComp { + if (match(6, m_test(m_msg))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_050402_actual_parameters_006()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_006.m_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_007 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_007 verify that template variables cannot be used as in formal value parameters of templates > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_007 NegSem_050402_actual_parameters_007.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of templates + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_007 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 5 + p_val; + + testcase TC_NegSem_050402_actual_parameters_007() runs on GeneralComp { + var template integer vm_msg := 2; + if (match(7, m_test(vm_msg))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_050402_actual_parameters_007()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template variable `vm_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_008 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_008 verify that template in parameters cannot be used as in formal value parameters of templates > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_008 NegSem_050402_actual_parameters_008.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters cannot be used as in formal value parameters of templates + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_008 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 5 + p_val; + + function f_caller(in template integer p_val) { + if (match(8, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + + testcase TC_NegSem_050402_actual_parameters_008() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_008()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_009 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_009 verify that template out parameters cannot be used as in formal value parameters of templates > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_009 NegSem_050402_actual_parameters_009.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of templates + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_009 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 5 + p_val; + + function f_caller(out template integer p_val) { + p_val := 4; // out parameter shall have a value before we can pass it to a function + if (match(9, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + + testcase TC_NegSem_050402_actual_parameters_009() runs on GeneralComp { + var template integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_009()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `out' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_010 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_010 verify that template out parameters cannot be used as in formal value parameters of templates > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_010 NegSem_050402_actual_parameters_010.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of templates + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_010 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 5 + p_val; + + function f_caller(inout template integer p_val) { + if (match(10, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + + testcase TC_NegSem_050402_actual_parameters_010() runs on GeneralComp { + var template integer v_val := 5; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_010()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `inout' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_011 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_011 verify that template parameters cannot be used as in formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_011 NegSem_050402_actual_parameters_011.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_011 { + + type component GeneralComp { + timer t := 0.0; + } + + template integer m_msg := 1; + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_011() runs on GeneralComp { + t.start; + a_test(m_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_011()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_011.m_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_012 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_012 verify that template variables cannot be used as in formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_012 NegSem_050402_actual_parameters_012.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_012 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_012() runs on GeneralComp { + var template integer vm_msg := 2; + t.start; + a_test(vm_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_012()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template variable `vm_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_014 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_014 verify that template out parameters cannot be used as in formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_014 NegSem_050402_actual_parameters_014.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_014 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(out template integer p_val) runs on GeneralComp { + p_val := 4; // out parameter shall have a value before we can pass it to a function + a_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_014() runs on GeneralComp { + var template integer v_val; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_014()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `out' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_015 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_015 verify that template inout parameters cannot be used as in formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_015 NegSem_050402_actual_parameters_015.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_015 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(inout template integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_015() runs on GeneralComp { + var template integer v_val := 5; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_015()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `inout' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_016 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_016 verify that template inout parameters cannot be used as in formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_016 NegSem_050402_actual_parameters_016.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_016 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + testcase TC_NegSem_050402_actual_parameters_016(in integer p_val) runs on GeneralComp { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_016(m_msg)); // tested parameter passing + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_016.m_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_017 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_017 verify that template variables cannot be used as in formal value parameters of test cases > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_017 NegSem_050402_actual_parameters_017.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_017 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_017(in integer p_val) runs on GeneralComp { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var template integer vm_msg := 2; + execute(TC_NegSem_050402_actual_parameters_017(vm_msg)); // tested parameter passing + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template variable `vm_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_018 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_018 verify that template in parameters cannot be used as in formal value parameters of test cases > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_018 NegSem_050402_actual_parameters_018.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters cannot be used as in formal value parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_018 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_018(in integer p_val) runs on GeneralComp { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template integer p_val) { + execute(TC_NegSem_050402_actual_parameters_018(p_val)); // tested parameter passing + } + + control { + f_caller(3); // this parameter passing is not a subject of the test + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_019 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_019 verify that template out parameters cannot be used as in formal value parameters of test cases > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_019 NegSem_050402_actual_parameters_019.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_019 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_019(in integer p_val) runs on GeneralComp { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out template integer p_val) { + p_val := 4; // out parameter shall have a value before we can pass it to a function + execute(TC_NegSem_050402_actual_parameters_019(p_val)); // tested parameter passing + } + + control { + var template integer vm_val; + f_caller(vm_val); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `out' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_020 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_020 verify that template inout parameters cannot be used as in formal value parameters of test cases > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_020 NegSem_050402_actual_parameters_020.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed by value to in formal value parameters shall be +// variables, literal values, module parameters, constants, variables, value returning +// (external) functions, formal value parameters (of in, inout or out parameterization) +// of the current scope or expressions composed of the above. + +module NegSem_050402_actual_parameters_020 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_020(in integer p_val) runs on GeneralComp { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout template integer p_val) { + execute(TC_NegSem_050402_actual_parameters_020(p_val)); // tested parameter passing + } + + control { + var template integer vm_val := 5; + f_caller(vm_val); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `inout' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_021 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_021 verify that literals cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_021 NegSem_050402_actual_parameters_021.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_021 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_021() runs on GeneralComp { + f_test(1); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_021()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_022 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC -050402_022 verify that literals cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_022 NegSem_050402_actual_parameters_022.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_022 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + function f_test(inout integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_022() runs on GeneralComp { + f_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_022()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of module parameter +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_023 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_023 verify that constants cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_023 NegSem_050402_actual_parameters_023.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_023 { + + type component GeneralComp { + } + + const integer c_val := 3; + + function f_test(inout integer p_val) { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_023() runs on GeneralComp { + f_test(c_val); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_023()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of constant +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_024 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_024 verify that function calls cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_024 NegSem_050402_actual_parameters_024.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_024 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + function f_test(inout integer p_val) { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_024() runs on GeneralComp { + f_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_024()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of function +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_025 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_025 verify that expressions cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_025 NegSem_050402_actual_parameters_025.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_025 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + function f_test(inout integer p_val) { + if (p_val == 9) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_025() runs on GeneralComp { + var integer v_val := 5; + f_test(10 + f_ret() - v_val); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_025()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_026 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_026 verify that template parameters cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_026 NegSem_050402_actual_parameters_026.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_026 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + function f_test(inout integer p_val) { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_026() runs on GeneralComp { + f_test(m_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_026()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_027 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_027 verify that template variables cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_027 NegSem_050402_actual_parameters_027.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_027 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_027() runs on GeneralComp { + var template integer vm_msg := 2; + f_test(vm_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_027()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `vm_msg' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_028 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_028 verify that template in parameters cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_028 NegSem_050402_actual_parameters_028.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_028 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_028() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_028()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_029 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_029 verify that template out parameters cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_029 NegSem_050402_actual_parameters_029.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_029 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out template integer p_val) { + p_val := 4; // out parameter shall have a value before we can pass it to a function + f_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_029() runs on GeneralComp { + var template integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_029()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `out' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_030 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_030 verify that template inout parameters cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_030 NegSem_050402_actual_parameters_030.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_030 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_030() runs on GeneralComp { + var template integer v_val := 5; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_030()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a value was expected instead of `inout' template parameter `p_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_031 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_031 verify that template variable element reference cannot be used as inout formal value parameters of functions > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_031 NegSem_050402_actual_parameters_031.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variable element reference cannot be used as inout formal value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_031 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + function f_test(inout integer p_val) { + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_031() runs on GeneralComp { + var template R v_val := { field1 := 10 }; + f_test(v_val.field1); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_031()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `v_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_032 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_032 verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_001 NegSem_050402_actual_parameters_001.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_032 NegSem_050402_actual_parameters_032.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of functions + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_001 { +module NegSem_050402_actual_parameters_032 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + function f_test(inout integer p_val) { + if (p_val == 11) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template R p_param) { + f_test(p_param.field1); // tested parameter passing + } + + testcase TC_NegSem_050402_actual_parameters_032() runs on GeneralComp { + f_caller({field1 := 11 }); + } + + control { + execute(TC_NegSem_050402_actual_parameters_032()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_param' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_033 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_033 verify that literals cannot be used as inout formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_033 NegSem_050402_actual_parameters_033.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_033 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_033() runs on GeneralComp { + t.start; + a_test(1); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_033()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_034 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_034 verify that module parameters cannot be used as inout formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_034 NegSem_050402_actual_parameters_034.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_034 { + + type component GeneralComp { + timer t := 0.0; + } + + modulepar integer PX_VAL := 2; + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_034() runs on GeneralComp { + t.start; + a_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_034()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of module parameter +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_035 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_035 verify that constants cannot be used as inout formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_035 NegSem_050402_actual_parameters_035.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_035 { type component GeneralComp { + timer t := 0.0; + } + + const integer c_val := 3; + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_035() runs on GeneralComp { + t.start; + a_test(c_val); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_035()); } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of constant `@NegSem_050402_actual_parameters_035.c_val' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_050402_actual_parameters_036 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 050402_036 verify that function calls cannot be used as inout formal value parameters of altsteps > + +<COMPILE> + +<MODULE TTCN NegSem_050402_actual_parameters_036 NegSem_050402_actual_parameters_036.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_036 { + + type component GeneralComp { + timer t := 0.0; + } - template integer m_msg := 1; + function f_ret() return integer { + return 5; + } - function f_test(in integer p_val) { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } } - testcase TC_NegSem_050402_actual_parameters_001() runs on GeneralComp { - f_test(m_msg); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_036() runs on GeneralComp { + t.start; + a_test(f_ret()); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_001()); + execute(TC_NegSem_050402_actual_parameters_036()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_001.m_msg' +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of function `@NegSem_050402_actual_parameters_036.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_002 negative test +:h3. NegSem_050402_actual_parameters_037 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_002 verify that template variables cannot be used as in formal value parameters of functions > +<TC - 050402_037 verify that expressions cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_002 NegSem_050402_actual_parameters_002.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_037 NegSem_050402_actual_parameters_037.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of functions + ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_002 { +module NegSem_050402_actual_parameters_037 { type component GeneralComp { - } + timer t := 0.0; + } - function f_test(in integer p_val) { - if (p_val == 2) { setverdict(pass); } - else { setverdict(fail); } + function f_ret() return integer { + return 4; } - - testcase TC_NegSem_050402_actual_parameters_002() runs on GeneralComp { - var template integer vm_msg := 2; - f_test(vm_msg); // tested parameter passing + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 9) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_037() runs on GeneralComp { + var integer v_val := 5; + t.start; + a_test(10 + f_ret() - v_val); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_002()); + execute(TC_NegSem_050402_actual_parameters_037()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template variable `vm_msg' +error: Reference to a variable or value parameter was expected for an `inout' value parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_003 negative test +:h3. NegSem_050402_actual_parameters_038 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_003 verify that template in parameters cannot be used as in formal value parameters of functions > +<TC - 050402_038 verify that template parameters cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_003 NegSem_050402_actual_parameters_003.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_038 NegSem_050402_actual_parameters_038.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template in parameters cannot be used as in formal value parameters of functions + ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_003 { +module NegSem_050402_actual_parameters_038 { type component GeneralComp { - } - - function f_test(in integer p_val) { - if (p_val == 3) { setverdict(pass); } - else { setverdict(fail); } - } + timer t := 0.0; + } - function f_caller(in template integer p_val) { - f_test(p_val); // tested parameter passing + template integer m_msg := 1; + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } } - - testcase TC_NegSem_050402_actual_parameters_003() runs on GeneralComp { - f_caller(3); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_038() runs on GeneralComp { + t.start; + a_test(m_msg); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_003()); + execute(TC_NegSem_050402_actual_parameters_038()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template parameter `p_val' +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_004 negative test +:h3. NegSem_050402_actual_parameters_039 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_004 verify that template out parameters cannot be used as in formal value parameters of functions > +<TC - 050402_039 verify that template variables cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_004 NegSem_050402_actual_parameters_004.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_039 NegSem_050402_actual_parameters_039.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of functions + ** @purpose 1:5.4.2, verify that template variables cannot be used as inout formal value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_004 { +module NegSem_050402_actual_parameters_039 { type component GeneralComp { - } + timer t := 0.0; + } - function f_test(in integer p_val) { - if (p_val == 4) { setverdict(pass); } - else { setverdict(fail); } - } - - function f_caller(out template integer p_val) { - p_val := 4; // out parameter shall have a value before we can pass it to a function - f_test(p_val); // tested parameter passing + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } } - - testcase TC_NegSem_050402_actual_parameters_004() runs on GeneralComp { - var template integer v_val; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_039() runs on GeneralComp { + var template integer vm_msg := 2; + t.start; + a_test(vm_msg); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_004()); + execute(TC_NegSem_050402_actual_parameters_039()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `out' template parameter `p_val' +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `vm_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_005 negative test +:h3. NegSem_050402_actual_parameters_040 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_005 verify that template inout parameters cannot be used as in formal value parameters of functions > +<TC - 050402_040 verify that template in parameters cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_005 NegSem_050402_actual_parameters_005.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_040 NegSem_050402_actual_parameters_040.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of functions + ** @purpose 1:5.4.2, verify that template in parameters cannot be used as inout formal value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types.. -module NegSem_050402_actual_parameters_005 { +module NegSem_050402_actual_parameters_040 { type component GeneralComp { + timer t := 0.0; } - function f_test(in integer p_val) { - if (p_val == 4) { setverdict(pass); } - else { setverdict(fail); } + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } } - function f_caller(inout template integer p_val) { - f_test(p_val); // tested parameter passing + function f_caller(in template integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing } - testcase TC_NegSem_050402_actual_parameters_005() runs on GeneralComp { - var template integer v_val := 5; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_040() runs on GeneralComp { + t.start; + f_caller(3); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_005()); + execute(TC_NegSem_050402_actual_parameters_040()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `inout' template parameter `p_val' +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_006 negative test +:h3. NegSem_050402_actual_parameters_041 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_006 verify that template parameters cannot be used as in formal value parameters of templates > +<TC - 050402_041 verify that template out parameters cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_006 NegSem_050402_actual_parameters_006.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_041 NegSem_050402_actual_parameters_041.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of templates + ** @purpose 1:5.4.2, verify that template out parameters cannot be used as inout formal value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_006 { +module NegSem_050402_actual_parameters_041 { type component GeneralComp { - } - - template integer m_msg := 1; + timer t := 0.0; + } - template integer m_test(in integer p_val) := 5 + p_val; - - testcase TC_NegSem_050402_actual_parameters_006() runs on GeneralComp { - if (match(6, m_test(m_msg))) { // tested parameter passing - setverdict(pass); - } else { - setverdict(fail); + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } } + } + + function f_caller(out template integer p_val) runs on GeneralComp { + p_val := 4; // out parameter shall have a value before we can pass it to a function + a_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_041() runs on GeneralComp { + var template integer v_val; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_006()); + execute(TC_NegSem_050402_actual_parameters_041()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_006.m_msg' +error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `out' template parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_007 negative test +:h3. NegSem_050402_actual_parameters_042 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_007 verify that template variables cannot be used as in formal value parameters of templates > +<TC - 050402_042 verify that template inout parameters cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_007 NegSem_050402_actual_parameters_007.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_042 NegSem_050402_actual_parameters_042.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of templates + ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as inout formal value parameters of altsteps ** @verdict pass reject - ***************************************************/ - -// The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. + ***************************************************/ -module NegSem_050402_actual_parameters_007 { +// The following requirement is tested: +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. + +module NegSem_050402_actual_parameters_042 { type component GeneralComp { - } + timer t := 0.0; + } - template integer m_test(in integer p_val) := 5 + p_val; - - testcase TC_NegSem_050402_actual_parameters_007() runs on GeneralComp { - var template integer vm_msg := 2; - if (match(7, m_test(vm_msg))) { // tested parameter passing - setverdict(pass); - } else { - setverdict(fail); + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } } + } + + function f_caller(inout template integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_042() runs on GeneralComp { + var template integer v_val := 5; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_007()); + execute(TC_NegSem_050402_actual_parameters_042()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template variable `vm_msg' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `inout' template parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_008 negative test +:h3. NegSem_050402_actual_parameters_043 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_008 verify that template in parameters cannot be used as in formal value parameters of templates > +<TC - 050402_043 verify that template variable element reference cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_008 NegSem_050402_actual_parameters_008.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_043 NegSem_050402_actual_parameters_043.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template in parameters cannot be used as in formal value parameters of templates + ** @purpose 1:5.4.2, verify that template variable element reference cannot be used as inout formal value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_008 { +module NegSem_050402_actual_parameters_043 { type component GeneralComp { + timer t := 0.0; } - template integer m_test(in integer p_val) := 5 + p_val; - - function f_caller(in template integer p_val) { - if (match(8, m_test(p_val))) { // tested parameter passing - setverdict(pass); - } else { - setverdict(fail); + type record R { + integer field1 + } + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } } } - - testcase TC_NegSem_050402_actual_parameters_008() runs on GeneralComp { - f_caller(3); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_043() runs on GeneralComp { + var template R v_val := { field1 := 10 }; + t.start; + a_test(v_val.field1); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_008()); + execute(TC_NegSem_050402_actual_parameters_043()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `v_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_009 negative test +:h3. NegSem_050402_actual_parameters_044 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_009 verify that template out parameters cannot be used as in formal value parameters of templates > +<TC - 050402_044 verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_009 NegSem_050402_actual_parameters_009.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_044 NegSem_050402_actual_parameters_044.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of templates + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_009 { +module NegSem_050402_actual_parameters_044 { type component GeneralComp { + timer t := 0.0; } - template integer m_test(in integer p_val) := 5 + p_val; - - function f_caller(out template integer p_val) { - p_val := 4; // out parameter shall have a value before we can pass it to a function - if (match(9, m_test(p_val))) { // tested parameter passing - setverdict(pass); - } else { - setverdict(fail); + type record R { + integer field1 + } + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 11) { setverdict(pass); } + else { setverdict(fail); } } } - - testcase TC_NegSem_050402_actual_parameters_009() runs on GeneralComp { - var template integer v_val; - f_caller(v_val); // this parameter passing is not a subject of the test + function f_caller(in template R p_param) runs on GeneralComp { + a_test(p_param.field1); // tested parameter passing + } + + testcase TC_NegSem_050402_actual_parameters_044() runs on GeneralComp { + t.start; + f_caller({field1 := 11 }); } control { - execute(TC_NegSem_050402_actual_parameters_009()); + execute(TC_NegSem_050402_actual_parameters_044()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `out' template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_param' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_010 negative test +:h3. NegSem_050402_actual_parameters_045 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_010 verify that template out parameters cannot be used as in formal value parameters of templates > +<TC - 050402_045 verify that literals cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_010 NegSem_050402_actual_parameters_010.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_045 NegSem_050402_actual_parameters_045.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of templates + ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_010 { +module NegSem_050402_actual_parameters_045 { type component GeneralComp { - } - - template integer m_test(in integer p_val) := 5 + p_val; - - function f_caller(inout template integer p_val) { - if (match(10, m_test(p_val))) { // tested parameter passing - setverdict(pass); - } else { - setverdict(fail); - } - } + } - - testcase TC_NegSem_050402_actual_parameters_010() runs on GeneralComp { - var template integer v_val := 5; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_045(inout integer p_val) runs on GeneralComp { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_010()); + execute(TC_NegSem_050402_actual_parameters_045(1)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `inout' template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_011 negative test +:h3. NegSem_050402_actual_parameters_046 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_011 verify that template parameters cannot be used as in formal value parameters of altsteps > +<TC - 050402_046 verify that module parameters cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_011 NegSem_050402_actual_parameters_011.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_046 NegSem_050402_actual_parameters_046.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_011 { +module NegSem_050402_actual_parameters_046 { type component GeneralComp { - timer t := 0.0; } - template integer m_msg := 1; - - altstep a_test(integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } - } - } + modulepar integer PX_VAL := 2; - testcase TC_NegSem_050402_actual_parameters_011() runs on GeneralComp { - t.start; - a_test(m_msg); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_046(inout integer p_val) runs on GeneralComp { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_011()); + execute(TC_NegSem_050402_actual_parameters_046(PX_VAL)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_011.m_msg' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of module parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_012 negative test +:h3. NegSem_050402_actual_parameters_047 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_012 verify that template variables cannot be used as in formal value parameters of altsteps > +<TC - 050402_047 verify that constants cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_012 NegSem_050402_actual_parameters_012.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_047 NegSem_050402_actual_parameters_047.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_012 { +module NegSem_050402_actual_parameters_047 { type component GeneralComp { - timer t := 0.0; - } - - altstep a_test(integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 2) { setverdict(pass); } - else { setverdict(fail); } - } - } + } - testcase TC_NegSem_050402_actual_parameters_012() runs on GeneralComp { - var template integer vm_msg := 2; - t.start; - a_test(vm_msg); // tested parameter passing + const integer c_val := 3; + + testcase TC_NegSem_050402_actual_parameters_047(inout integer p_val) runs on GeneralComp { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_012()); + execute(TC_NegSem_050402_actual_parameters_047(c_val)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template variable `vm_msg' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of constant <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_014 negative test +:h3. NegSem_050402_actual_parameters_048 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_014 verify that template out parameters cannot be used as in formal value parameters of altsteps > +<TC - 050402_048 verify that function calls cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_014 NegSem_050402_actual_parameters_014.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_048 NegSem_050402_actual_parameters_048.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_014 { +module NegSem_050402_actual_parameters_048 { type component GeneralComp { - timer t := 0.0; } - altstep a_test(integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 4) { setverdict(pass); } - else { setverdict(fail); } - } - } - - function f_caller(out template integer p_val) runs on GeneralComp { - p_val := 4; // out parameter shall have a value before we can pass it to a function - a_test(p_val); // tested parameter passing + function f_ret() return integer { + return 5; } - - testcase TC_NegSem_050402_actual_parameters_014() runs on GeneralComp { - var template integer v_val; - t.start; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_048(inout integer p_val) runs on GeneralComp { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_014()); + execute(TC_NegSem_050402_actual_parameters_048(f_ret())); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `out' template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of function `@NegSem_050402_actual_parameters_048.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_015 negative test +:h3. NegSem_050402_actual_parameters_049 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_015 verify that template inout parameters cannot be used as in formal value parameters of altsteps > +<TC - 050402_049 verify that expressions cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_015 NegSem_050402_actual_parameters_015.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_049 NegSem_050402_actual_parameters_049.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_015 { +module NegSem_050402_actual_parameters_049 { type component GeneralComp { - timer t := 0.0; } - altstep a_test(integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 5) { setverdict(pass); } - else { setverdict(fail); } - } - } - - function f_caller(inout template integer p_val) runs on GeneralComp { - a_test(p_val); // tested parameter passing + function f_ret() return integer { + return 4; } - - testcase TC_NegSem_050402_actual_parameters_015() runs on GeneralComp { - var template integer v_val := 5; - t.start; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_049(inout integer p_val) runs on GeneralComp { + if (p_val == 9) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_015()); + var integer v_val := 5; + execute(TC_NegSem_050402_actual_parameters_049(10 + f_ret() - v_val)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `inout' template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_016 negative test +:h3. NegSem_050402_actual_parameters_050 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_016 verify that template inout parameters cannot be used as in formal value parameters of altsteps > +<TC - 050402_050 verify that template parameters cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_016 NegSem_050402_actual_parameters_016.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_050 NegSem_050402_actual_parameters_050.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as in formal value parameters of test cases + ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_016 { +module NegSem_050402_actual_parameters_050 { type component GeneralComp { } template integer m_msg := 1; - testcase TC_NegSem_050402_actual_parameters_016(in integer p_val) runs on GeneralComp { + testcase TC_NegSem_050402_actual_parameters_050(inout integer p_val) runs on GeneralComp { if (p_val == 1) { setverdict(pass); } else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_016(m_msg)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_050(m_msg)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template `@NegSem_050402_actual_parameters_016.m_msg' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template `@NegSem_050402_actual_parameters_050.m_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_017 negative test +:h3. NegSem_050402_actual_parameters_051 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_017 verify that template variables cannot be used as in formal value parameters of test cases > +<TC - 050402_051 verify that template variables cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_017 NegSem_050402_actual_parameters_017.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_051 NegSem_050402_actual_parameters_051.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variables cannot be used as in formal value parameters of test cases + ** @purpose 1:5.4.2, verify that template variables cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. - -module NegSem_050402_actual_parameters_017 { +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. +module NegSem_050402_actual_parameters_051 { type component GeneralComp { } - testcase TC_NegSem_050402_actual_parameters_017(in integer p_val) runs on GeneralComp { + testcase TC_NegSem_050402_actual_parameters_051(inout integer p_val) runs on GeneralComp { if (p_val == 2) { setverdict(pass); } else { setverdict(fail); } } control { var template integer vm_msg := 2; - execute(TC_NegSem_050402_actual_parameters_017(vm_msg)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_051(vm_msg)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template variable `vm_msg' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `vm_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_018 negative test +:h3. NegSem_050402_actual_parameters_052 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_018 verify that template in parameters cannot be used as in formal value parameters of test cases > +<TC - 050402_052 verify that template in parameters cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_018 NegSem_050402_actual_parameters_018.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_052 NegSem_050402_actual_parameters_052.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template in parameters cannot be used as in formal value parameters of test cases + ** @purpose 1:5.4.2, verify that template in parameters cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_018 { +module NegSem_050402_actual_parameters_052 { type component GeneralComp { } - testcase TC_NegSem_050402_actual_parameters_018(in integer p_val) runs on GeneralComp { + testcase TC_NegSem_050402_actual_parameters_052(inout integer p_val) runs on GeneralComp { if (p_val == 3) { setverdict(pass); } else { setverdict(fail); } } function f_caller(in template integer p_val) { - execute(TC_NegSem_050402_actual_parameters_018(p_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_052(p_val)); // tested parameter passing } control { @@ -3762,47 +6054,46 @@ module NegSem_050402_actual_parameters_018 { <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_019 negative test +:h3. NegSem_050402_actual_parameters_053 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_019 verify that template out parameters cannot be used as in formal value parameters of test cases > +<TC - 050402_053 verify that template in parameters cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_019 NegSem_050402_actual_parameters_019.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_053 NegSem_050402_actual_parameters_053.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template out parameters cannot be used as in formal value parameters of test cases + ** @purpose 1:5.4.2, verify that template out parameters cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_019 { +module NegSem_050402_actual_parameters_053 { type component GeneralComp { } - testcase TC_NegSem_050402_actual_parameters_019(in integer p_val) runs on GeneralComp { + testcase TC_NegSem_050402_actual_parameters_053(inout integer p_val) runs on GeneralComp { if (p_val == 4) { setverdict(pass); } else { setverdict(fail); } } function f_caller(out template integer p_val) { p_val := 4; // out parameter shall have a value before we can pass it to a function - execute(TC_NegSem_050402_actual_parameters_019(p_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_053(p_val)); // tested parameter passing } control { @@ -3813,46 +6104,45 @@ module NegSem_050402_actual_parameters_019 { <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `out' template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `out' template parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_020 negative test +:h3. NegSem_050402_actual_parameters_054 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_020 verify that template inout parameters cannot be used as in formal value parameters of test cases > +<TC - 050402_054 verify that template inout parameters cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_020 NegSem_050402_actual_parameters_020.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_054 NegSem_050402_actual_parameters_054.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as in formal value parameters of test cases + ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed by value to in formal value parameters shall be -// variables, literal values, module parameters, constants, variables, value returning -// (external) functions, formal value parameters (of in, inout or out parameterization) -// of the current scope or expressions composed of the above. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_020 { +module NegSem_050402_actual_parameters_054 { type component GeneralComp { } - testcase TC_NegSem_050402_actual_parameters_020(in integer p_val) runs on GeneralComp { + testcase TC_NegSem_050402_actual_parameters_054(inout integer p_val) runs on GeneralComp { if (p_val == 5) { setverdict(pass); } else { setverdict(fail); } } function f_caller(inout template integer p_val) { - execute(TC_NegSem_050402_actual_parameters_020(p_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_054(p_val)); // tested parameter passing } control { @@ -3863,25 +6153,25 @@ module NegSem_050402_actual_parameters_020 { <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `inout' template parameter `p_val' + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `inout' template parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_021 negative test +:h3. NegSem_050402_actual_parameters_055 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_021 verify that literals cannot be used as inout formal value parameters of functions > +<TC - 050402_055 verify that template variable element reference cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_021 NegSem_050402_actual_parameters_021.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_055 NegSem_050402_actual_parameters_055.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that template variable element reference cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ @@ -3890,46 +6180,47 @@ error: Reference to a value was expected instead of `inout' template parameter ` // or formal value parameters (of in, inout or out parameterization) or references to // elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_021 { +module NegSem_050402_actual_parameters_055 { type component GeneralComp { - } - - function f_test(inout integer p_val) { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } + } + + type record R { + integer field1 } - testcase TC_NegSem_050402_actual_parameters_021() runs on GeneralComp { - f_test(1); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_055(inout integer p_val) runs on GeneralComp { + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_021()); + var template R v_val := { field1 := 10 }; + execute(TC_NegSem_050402_actual_parameters_055(v_val.field1)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `v_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_022 negative test +:h3. NegSem_050402_actual_parameters_056 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC -050402_022 verify that literals cannot be used as inout formal value parameters of functions > +<TC - 050402_056 verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_022 NegSem_050402_actual_parameters_022.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_056 NegSem_050402_actual_parameters_056.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of test cases ** @verdict pass reject ***************************************************/ @@ -3938,4951 +6229,4981 @@ error: Reference to a variable or value parameter was expected for an `inout' va // or formal value parameters (of in, inout or out parameterization) or references to // elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_022 { +module NegSem_050402_actual_parameters_056 { type component GeneralComp { - } - - modulepar integer PX_VAL := 2; - - function f_test(inout integer p_val) { - if (p_val == 2) { setverdict(pass); } - else { setverdict(fail); } } + + type record R { + integer field1 + } - testcase TC_NegSem_050402_actual_parameters_022() runs on GeneralComp { - f_test(PX_VAL); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_056(inout integer p_val) runs on GeneralComp { + if (p_val == 11) { setverdict(pass); } + else { setverdict(fail); } } + + function f_caller(in template R p_param) { + execute(TC_NegSem_050402_actual_parameters_056(p_param.field1)); // tested parameter passing + } control { - execute(TC_NegSem_050402_actual_parameters_022()); + f_caller({field1 := 11 }); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of module parameter + error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_param' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_023 negative test +:h3. NegSem_050402_actual_parameters_057 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_023 verify that constants cannot be used as inout formal value parameters of functions > +<TC - 050402_057 verify that literals cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_023 NegSem_050402_actual_parameters_023.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_057 NegSem_050402_actual_parameters_057.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_023 { +module NegSem_050402_actual_parameters_057 { type component GeneralComp { } - const integer c_val := 3; - - function f_test(inout integer p_val) { - if (p_val == 3) { setverdict(pass); } - else { setverdict(fail); } + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); } - testcase TC_NegSem_050402_actual_parameters_023() runs on GeneralComp { - f_test(c_val); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_057() runs on GeneralComp { + f_test(1); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_023()); + execute(TC_NegSem_050402_actual_parameters_057()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of constant + error: Reference to a template variable or template parameter was expected for an `out' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_024 negative test +:h3. NegSem_050402_actual_parameters_058 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_024 verify that function calls cannot be used as inout formal value parameters of functions > +<TC - 050402_058 verify that module parameters cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_024 NegSem_050402_actual_parameters_024.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_058 NegSem_050402_actual_parameters_058.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_024 { +module NegSem_050402_actual_parameters_058 { type component GeneralComp { - } - - function f_ret() return integer { - return 5; - } + } + + modulepar integer PX_VAL := 2; - function f_test(inout integer p_val) { - if (p_val == 5) { setverdict(pass); } - else { setverdict(fail); } + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); } - testcase TC_NegSem_050402_actual_parameters_024() runs on GeneralComp { - f_test(f_ret()); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_058() runs on GeneralComp { + f_test(PX_VAL); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_024()); + execute(TC_NegSem_050402_actual_parameters_058()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of function + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of module parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_025 negative test +:h3. NegSem_050402_actual_parameters_059 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_025 verify that expressions cannot be used as inout formal value parameters of functions > +<TC - 050402_059 verify that constants cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_025 NegSem_050402_actual_parameters_025.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_059 NegSem_050402_actual_parameters_059.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_025 { +module NegSem_050402_actual_parameters_059 { type component GeneralComp { - } - - function f_ret() return integer { - return 4; - } + } + + const integer c_val := 3; - function f_test(inout integer p_val) { - if (p_val == 9) { setverdict(pass); } - else { setverdict(fail); } + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); } - - testcase TC_NegSem_050402_actual_parameters_025() runs on GeneralComp { - var integer v_val := 5; - f_test(10 + f_ret() - v_val); // tested parameter passing + + testcase TC_NegSem_050402_actual_parameters_059() runs on GeneralComp { + f_test(c_val); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_025()); + execute(TC_NegSem_050402_actual_parameters_059()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of constant <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_026 negative test +:h3. NegSem_050402_actual_parameters_060 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_026 verify that template parameters cannot be used as inout formal value parameters of functions > +<TC - 050402_060 verify that function calls cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_026 NegSem_050402_actual_parameters_026.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_060 NegSem_050402_actual_parameters_060.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_026 { +module NegSem_050402_actual_parameters_060 { type component GeneralComp { - } + } - template integer m_msg := 1; + function f_ret() return integer { + return 5; + } - function f_test(inout integer p_val) { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); } - testcase TC_NegSem_050402_actual_parameters_026() runs on GeneralComp { - f_test(m_msg); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_060() runs on GeneralComp { + f_test(f_ret()); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_026()); + execute(TC_NegSem_050402_actual_parameters_060()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of function <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_027 negative test +:h3. NegSem_050402_actual_parameters_061 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_027 verify that template variables cannot be used as inout formal value parameters of functions > +<TC - 050402_061 verify that expressions cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_027 NegSem_050402_actual_parameters_027.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_061 NegSem_050402_actual_parameters_061.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variables cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_027 { +module NegSem_050402_actual_parameters_061 { type component GeneralComp { - } + } - function f_test(inout integer p_val) { - if (p_val == 2) { setverdict(pass); } - else { setverdict(fail); } + function f_ret() return integer { + return 4; } - - testcase TC_NegSem_050402_actual_parameters_027() runs on GeneralComp { - var template integer vm_msg := 2; - f_test(vm_msg); // tested parameter passing + + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); + } + + testcase TC_NegSem_050402_actual_parameters_061() runs on GeneralComp { + var integer v_val := 5; + f_test(10 + f_ret() - v_val); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_027()); + execute(TC_NegSem_050402_actual_parameters_061()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `vm_msg' + error: Reference to a template variable or template parameter was expected for an `out' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_028 negative test +:h3. NegSem_050402_actual_parameters_062 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_028 verify that template in parameters cannot be used as inout formal value parameters of functions > +<TC - 050402_062 verify that template parameters cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_028 NegSem_050402_actual_parameters_028.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_062 NegSem_050402_actual_parameters_062.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template in parameters cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_028 { +module NegSem_050402_actual_parameters_062 { type component GeneralComp { - } + } - function f_test(inout integer p_val) { - if (p_val == 3) { setverdict(pass); } - else { setverdict(fail); } - } - - function f_caller(in template integer p_val) { - f_test(p_val); // tested parameter passing + template integer m_msg := 1; + + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); } - - testcase TC_NegSem_050402_actual_parameters_028() runs on GeneralComp { - f_caller(3); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_062() runs on GeneralComp { + f_test(m_msg); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_028()); + execute(TC_NegSem_050402_actual_parameters_062()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of template `@NegSem_050402_actual_parameters_062.m_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_029 negative test +:h3. NegSem_050402_actual_parameters_063 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_029 verify that template out parameters cannot be used as inout formal value parameters of functions > +<TC - 050402_063 verify that literals cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_029 NegSem_050402_actual_parameters_029.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_063 NegSem_050402_actual_parameters_063.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template out parameters cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_029 { +module NegSem_050402_actual_parameters_063 { type component GeneralComp { - } - - function f_test(inout integer p_val) { - if (p_val == 4) { setverdict(pass); } - else { setverdict(fail); } - } + timer t := 0.0; + } - function f_caller(out template integer p_val) { - p_val := 4; // out parameter shall have a value before we can pass it to a function - f_test(p_val); // tested parameter passing + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := ?; + setverdict(pass); + } } - - testcase TC_NegSem_050402_actual_parameters_029() runs on GeneralComp { - var template integer v_val; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_063() runs on GeneralComp { + t.start; + a_test(1); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_029()); + execute(TC_NegSem_050402_actual_parameters_063()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `out' template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `out' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_030 negative test +:h3. NegSem_050402_actual_parameters_064 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_030 verify that template inout parameters cannot be used as inout formal value parameters of functions > +<TC - 050402_064 verify that module parameters cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_030 NegSem_050402_actual_parameters_030.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_064 NegSem_050402_actual_parameters_064.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_030 { +module NegSem_050402_actual_parameters_064 { type component GeneralComp { - } - - function f_test(in integer p_val) { - if (p_val == 4) { setverdict(pass); } - else { setverdict(fail); } - } + timer t := 0.0; + } - function f_caller(inout template integer p_val) { - f_test(p_val); // tested parameter passing + modulepar integer PX_VAL := 2; + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := ?; + setverdict(pass); + } } - - testcase TC_NegSem_050402_actual_parameters_030() runs on GeneralComp { - var template integer v_val := 5; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_064() runs on GeneralComp { + t.start; + a_test(PX_VAL); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_030()); + execute(TC_NegSem_050402_actual_parameters_064()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a value was expected instead of `inout' template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of module parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_031 negative test +:h3. NegSem_050402_actual_parameters_065 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_031 verify that template variable element reference cannot be used as inout formal value parameters of functions > +<TC - 050402_065 verify that constants cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_031 NegSem_050402_actual_parameters_031.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_065 NegSem_050402_actual_parameters_065.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variable element reference cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_031 { +module NegSem_050402_actual_parameters_065 { type component GeneralComp { - } - - type record R { - integer field1 - } + timer t := 0.0; + } + + const integer c_val := 3; - function f_test(inout integer p_val) { - if (p_val == 10) { setverdict(pass); } - else { setverdict(fail); } + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := ?; + setverdict(pass); + } } - testcase TC_NegSem_050402_actual_parameters_031() runs on GeneralComp { - var template R v_val := { field1 := 10 }; - f_test(v_val.field1); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_065() runs on GeneralComp { + t.start; + a_test(c_val); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_031()); + execute(TC_NegSem_050402_actual_parameters_065()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `v_val' + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of constant <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_032 negative test +:h3. NegSem_050402_actual_parameters_066 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_032 verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of functions > +<TC - 050402_066 verify that function calls cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_032 NegSem_050402_actual_parameters_032.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_066 NegSem_050402_actual_parameters_066.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_032 { +module NegSem_050402_actual_parameters_066 { type component GeneralComp { + timer t := 0.0; } - type record R { - integer field1 - } - - function f_test(inout integer p_val) { - if (p_val == 11) { setverdict(pass); } - else { setverdict(fail); } + function f_ret() return integer { + return 5; } - function f_caller(in template R p_param) { - f_test(p_param.field1); // tested parameter passing + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := ?; + setverdict(pass); + } } - testcase TC_NegSem_050402_actual_parameters_032() runs on GeneralComp { - f_caller({field1 := 11 }); + testcase TC_NegSem_050402_actual_parameters_066() runs on GeneralComp { + t.start; + a_test(f_ret()); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_032()); + execute(TC_NegSem_050402_actual_parameters_066()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_param' + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of function <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_033 negative test +:h3. NegSem_050402_actual_parameters_067 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_033 verify that literals cannot be used as inout formal value parameters of altsteps > +<TC - 050402_067 verify that expressions cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_033 NegSem_050402_actual_parameters_033.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_067 NegSem_050402_actual_parameters_067.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_033 { +module NegSem_050402_actual_parameters_067 { type component GeneralComp { timer t := 0.0; - } - - altstep a_test(inout integer p_val) runs on GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + altstep a_test(out template integer p_val) runs on GeneralComp { []t.timeout { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } + p_val := ?; + setverdict(pass); } } - - testcase TC_NegSem_050402_actual_parameters_033() runs on GeneralComp { + + testcase TC_NegSem_050402_actual_parameters_067() runs on GeneralComp { + var integer v_val := 5; t.start; - a_test(1); // tested parameter passing + a_test(10 + f_ret() - v_val); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_033()); + execute(TC_NegSem_050402_actual_parameters_067()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter + error: Reference to a template variable or template parameter was expected for an `out' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_034 negative test +:h3. NegSem_050402_actual_parameters_068 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_034 verify that module parameters cannot be used as inout formal value parameters of altsteps > +<TC - 050402_068 verify that template parameters cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_034 NegSem_050402_actual_parameters_034.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_068 NegSem_050402_actual_parameters_068.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_034 { +module NegSem_050402_actual_parameters_068 { type component GeneralComp { timer t := 0.0; } - modulepar integer PX_VAL := 2; + template integer m_msg := 1; - altstep a_test(inout integer p_val) runs on GeneralComp { + altstep a_test(out template integer p_val) runs on GeneralComp { []t.timeout { - if (p_val == 2) { setverdict(pass); } - else { setverdict(fail); } + p_val := ?; + setverdict(pass); } } - testcase TC_NegSem_050402_actual_parameters_034() runs on GeneralComp { + testcase TC_NegSem_050402_actual_parameters_068() runs on GeneralComp { t.start; - a_test(PX_VAL); // tested parameter passing + a_test(m_msg); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_034()); + execute(TC_NegSem_050402_actual_parameters_068()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of module parameter + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of template <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_035 negative test +:h3. NegSem_050402_actual_parameters_069 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_035 verify that constants cannot be used as inout formal value parameters of altsteps > +<TC - 050402_069 verify that literals cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_035 NegSem_050402_actual_parameters_035.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_069 NegSem_050402_actual_parameters_069.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_035 { +module NegSem_050402_actual_parameters_069 { type component GeneralComp { - timer t := 0.0; } - const integer c_val := 3; - - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 3) { setverdict(pass); } - else { setverdict(fail); } - } - } - - testcase TC_NegSem_050402_actual_parameters_035() runs on GeneralComp { - t.start; - a_test(c_val); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_069(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_035()); + execute(TC_NegSem_050402_actual_parameters_069(1)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of constant `@NegSem_050402_actual_parameters_035.c_val' + error: Reference to a template variable or template parameter was expected for an `out' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_036 negative test +:h3. NegSem_050402_actual_parameters_070 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_036 verify that function calls cannot be used as inout formal value parameters of altsteps > +<TC - 050402_070 verify that module parameters cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_036 NegSem_050402_actual_parameters_036.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_070 NegSem_050402_actual_parameters_070.ttcn > /*************************************************** - ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal value parameters of altsteps - ** @verdict pass reject - ***************************************************/ - -// The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. - -module NegSem_050402_actual_parameters_036 { - - type component GeneralComp { - timer t := 0.0; - } - - function f_ret() return integer { - return 5; - } - - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 5) { setverdict(pass); } - else { setverdict(fail); } - } - } + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of test cases + ** @verdict pass reject + ***************************************************/ - testcase TC_NegSem_050402_actual_parameters_036() runs on GeneralComp { - t.start; - a_test(f_ret()); // tested parameter passing +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_070 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + testcase TC_NegSem_050402_actual_parameters_070(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_036()); + execute(TC_NegSem_050402_actual_parameters_070(PX_VAL)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of function `@NegSem_050402_actual_parameters_036.f_ret' + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of module parameter `@NegSem_050402_actual_parameters_070.PX_VAL' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_037 negative test +:h3. NegSem_050402_actual_parameters_071 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_037 verify that expressions cannot be used as inout formal value parameters of altsteps > +<TC - 050402_071 verify that constants cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_037 NegSem_050402_actual_parameters_037.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_071 NegSem_050402_actual_parameters_071.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_037 { +module NegSem_050402_actual_parameters_071 { type component GeneralComp { - timer t := 0.0; - } - - function f_ret() return integer { - return 4; - } - - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 9) { setverdict(pass); } - else { setverdict(fail); } - } - } - - testcase TC_NegSem_050402_actual_parameters_037() runs on GeneralComp { - var integer v_val := 5; - t.start; - a_test(10 + f_ret() - v_val); // tested parameter passing + } + + const integer c_val := 3; + + testcase TC_NegSem_050402_actual_parameters_071(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_037()); + execute(TC_NegSem_050402_actual_parameters_071(c_val)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of constant <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_038 negative test +:h3. NegSem_050402_actual_parameters_072 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_038 verify that template parameters cannot be used as inout formal value parameters of altsteps > +<TC - 050402_072 verify that function calls cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_038 NegSem_050402_actual_parameters_038.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_072 NegSem_050402_actual_parameters_072.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_038 { +module NegSem_050402_actual_parameters_072 { type component GeneralComp { - timer t := 0.0; - } - - template integer m_msg := 1; + } - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } - } + function f_ret() return integer { + return 5; } - testcase TC_NegSem_050402_actual_parameters_038() runs on GeneralComp { - t.start; - a_test(m_msg); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_072(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_038()); + execute(TC_NegSem_050402_actual_parameters_072(f_ret())); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of function `@NegSem_050402_actual_parameters_072.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_039 negative test +:h3. NegSem_050402_actual_parameters_073 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_039 verify that template variables cannot be used as inout formal value parameters of altsteps > +<TC - 050402_073 verify that expressions cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_039 NegSem_050402_actual_parameters_039.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_073 NegSem_050402_actual_parameters_073.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variables cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_039 { +module NegSem_050402_actual_parameters_073 { type component GeneralComp { - timer t := 0.0; - } + } - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } - } + function f_ret() return integer { + return 4; } - - testcase TC_NegSem_050402_actual_parameters_039() runs on GeneralComp { - var template integer vm_msg := 2; - t.start; - a_test(vm_msg); // tested parameter passing + + testcase TC_NegSem_050402_actual_parameters_073(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_039()); + var integer v_val := 5; + execute(TC_NegSem_050402_actual_parameters_073(10 + f_ret() - v_val)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `vm_msg' + error: Reference to a template variable or template parameter was expected for an `out' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_040 negative test +:h3. NegSem_050402_actual_parameters_074 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_040 verify that template in parameters cannot be used as inout formal value parameters of altsteps > +<TC - 050402_074 verify that template parameters cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_040 NegSem_050402_actual_parameters_040.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_074 NegSem_050402_actual_parameters_074.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template in parameters cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types.. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_040 { +module NegSem_050402_actual_parameters_074 { type component GeneralComp { - timer t := 0.0; - } + } - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } - } - } - - function f_caller(in template integer p_val) runs on GeneralComp { - a_test(p_val); // tested parameter passing - } + template integer m_msg := 1; - - testcase TC_NegSem_050402_actual_parameters_040() runs on GeneralComp { - t.start; - f_caller(3); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_074(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_040()); + execute(TC_NegSem_050402_actual_parameters_074(m_msg)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of template `@NegSem_050402_actual_parameters_074.m_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_041 negative test +:h3. NegSem_050402_actual_parameters_075 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_041 verify that template out parameters cannot be used as inout formal value parameters of altsteps > +<TC - 050402_075 verify that literals cannot be used as inout formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_041 NegSem_050402_actual_parameters_041.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_075 NegSem_050402_actual_parameters_075.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template out parameters cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_041 { +module NegSem_050402_actual_parameters_075 { type component GeneralComp { - timer t := 0.0; - } - - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } - } - } + } - function f_caller(out template integer p_val) runs on GeneralComp { - p_val := 4; // out parameter shall have a value before we can pass it to a function - a_test(p_val); // tested parameter passing + function f_test(inout template integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } } - - testcase TC_NegSem_050402_actual_parameters_041() runs on GeneralComp { - var template integer v_val; - t.start; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_075() runs on GeneralComp { + f_test(1); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_041()); + execute(TC_NegSem_050402_actual_parameters_075()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `out' template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_042 negative test +:h3. NegSem_050402_actual_parameters_076 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_042 verify that template inout parameters cannot be used as inout formal value parameters of altsteps > +<TC - 050402_076 verify that module parameters cannot be used as inout formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_042 NegSem_050402_actual_parameters_042.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_076 NegSem_050402_actual_parameters_076.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_042 { +module NegSem_050402_actual_parameters_076 { type component GeneralComp { - timer t := 0.0; - } - - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } - } - } + } - function f_caller(inout template integer p_val) runs on GeneralComp { - a_test(p_val); // tested parameter passing + modulepar integer PX_VAL := 2; + + function f_test(inout template integer p_val) { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } } - - testcase TC_NegSem_050402_actual_parameters_042() runs on GeneralComp { - var template integer v_val := 5; - t.start; - f_caller(v_val); // this parameter passing is not a subject of the test + testcase TC_NegSem_050402_actual_parameters_076() runs on GeneralComp { + f_test(PX_VAL); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_042()); + execute(TC_NegSem_050402_actual_parameters_076()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `inout' template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of module parameter `@NegSem_050402_actual_parameters_076.PX_VAL' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_043 negative test +:h3. NegSem_050402_actual_parameters_077 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_043 verify that template variable element reference cannot be used as inout formal value parameters of altsteps > +<TC - 050402_077 verify that constants cannot be used as inout formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_043 NegSem_050402_actual_parameters_043.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_077 NegSem_050402_actual_parameters_077.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variable element reference cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_043 { +module NegSem_050402_actual_parameters_077 { type component GeneralComp { - timer t := 0.0; - } - - type record R { - integer field1 - } + } + + const integer c_val := 3; - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 10) { setverdict(pass); } - else { setverdict(fail); } - } + function f_test(inout template integer p_val) { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_043() runs on GeneralComp { - var template R v_val := { field1 := 10 }; - t.start; - a_test(v_val.field1); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_077() runs on GeneralComp { + f_test(c_val); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_043()); + execute(TC_NegSem_050402_actual_parameters_077()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `v_val' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of constant `@NegSem_050402_actual_parameters_077.c_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_044 negative test +:h3. NegSem_050402_actual_parameters_078 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_044 verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of altsteps > +<TC - 050402_078 verify that constants cannot be used as inout formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_044 NegSem_050402_actual_parameters_044.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_078 NegSem_050402_actual_parameters_078.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of altsteps + ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_044 { +module NegSem_050402_actual_parameters_078 { type component GeneralComp { - timer t := 0.0; - } - - type record R { - integer field1 } - altstep a_test(inout integer p_val) runs on GeneralComp { - []t.timeout { - if (p_val == 11) { setverdict(pass); } - else { setverdict(fail); } - } + function f_ret() return integer { + return 5; } - function f_caller(in template R p_param) runs on GeneralComp { - a_test(p_param.field1); // tested parameter passing + function f_test(inout template integer p_val) { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_044() runs on GeneralComp { - t.start; - f_caller({field1 := 11 }); + testcase TC_NegSem_050402_actual_parameters_078() runs on GeneralComp { + f_test(f_ret()); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_044()); + execute(TC_NegSem_050402_actual_parameters_078()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_param' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of function `@NegSem_050402_actual_parameters_078.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_045 negative test +:h3. NegSem_050402_actual_parameters_079 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_045 verify that literals cannot be used as inout formal value parameters of test cases > +<TC - 050402_079 verify that expressions cannot be used as inout formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_045 NegSem_050402_actual_parameters_045.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_079 NegSem_050402_actual_parameters_079.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_045 { +module NegSem_050402_actual_parameters_079 { type component GeneralComp { - } - - testcase TC_NegSem_050402_actual_parameters_045(inout integer p_val) runs on GeneralComp { - if (p_val == 1) { setverdict(pass); } + } + + function f_ret() return integer { + return 4; + } + + function f_test(inout template integer p_val) { + if (match(9, p_val)) { setverdict(pass); } else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_079() runs on GeneralComp { + var integer v_val := 5; + f_test(10 + f_ret() - v_val); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_045(1)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_079()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter + error: Reference to a template variable or template parameter was expected for an `inout' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_046 negative test +:h3. NegSem_050402_actual_parameters_080 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_046 verify that module parameters cannot be used as inout formal value parameters of test cases > +<TC - 050402_080 verify that template parameters cannot be used as inout formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_046 NegSem_050402_actual_parameters_046.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_080 NegSem_050402_actual_parameters_080.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_046 { +module NegSem_050402_actual_parameters_080 { type component GeneralComp { - } - - modulepar integer PX_VAL := 2; - - testcase TC_NegSem_050402_actual_parameters_046(inout integer p_val) runs on GeneralComp { - if (p_val == 2) { setverdict(pass); } + } + + template integer m_msg := 1; + + function f_test(inout template integer p_val) { + if (match(1, p_val)) { setverdict(pass); } else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_080() runs on GeneralComp { + f_test(m_msg); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_046(PX_VAL)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_080()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of module parameter + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of template `@NegSem_050402_actual_parameters_080.m_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_047 negative test +:h3. NegSem_050402_actual_parameters_081 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_047 verify that constants cannot be used as inout formal value parameters of test cases > +<TC - 050402_081 verify that literals cannot be used as inout formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_047 NegSem_050402_actual_parameters_047.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_081 NegSem_050402_actual_parameters_081.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. - -module NegSem_050402_actual_parameters_047 { +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. +module NegSem_050402_actual_parameters_081 { type component GeneralComp { + timer t := 0.0; } - const integer c_val := 3; + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } - testcase TC_NegSem_050402_actual_parameters_047(inout integer p_val) runs on GeneralComp { - if (p_val == 3) { setverdict(pass); } - else { setverdict(fail); } + testcase TC_NegSem_050402_actual_parameters_081() runs on GeneralComp { + t.start; + a_test(1); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_047(c_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_081()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of constant + error: Reference to a template variable or template parameter was expected for an `inout' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_048 negative test +:h3. NegSem_050402_actual_parameters_082 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_048 verify that function calls cannot be used as inout formal value parameters of test cases > +<TC - 050402_082 verify that module parameters cannot be used as inout formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_048 NegSem_050402_actual_parameters_048.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_082 NegSem_050402_actual_parameters_082.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. - -module NegSem_050402_actual_parameters_048 { +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. +module NegSem_050402_actual_parameters_082 { type component GeneralComp { - } + timer t := 0.0; + } + + modulepar integer PX_VAL := 2; - function f_ret() return integer { - return 5; + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } } - testcase TC_NegSem_050402_actual_parameters_048(inout integer p_val) runs on GeneralComp { - if (p_val == 5) { setverdict(pass); } - else { setverdict(fail); } + testcase TC_NegSem_050402_actual_parameters_082() runs on GeneralComp { + t.start; + a_test(PX_VAL); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_048(f_ret())); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_082()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of function `@NegSem_050402_actual_parameters_048.f_ret' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of module parameter `@NegSem_050402_actual_parameters_082.PX_VAL' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_049 negative test +:h3. NegSem_050402_actual_parameters_083 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_049 verify that expressions cannot be used as inout formal value parameters of test cases > +<TC - 050402_083 verify that module parameters cannot be used as inout formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_049 NegSem_050402_actual_parameters_049.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_083 NegSem_050402_actual_parameters_083.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_049 { +module NegSem_050402_actual_parameters_083 { type component GeneralComp { - } + timer t := 0.0; + } + + const integer c_val := 3; - function f_ret() return integer { - return 4; + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } } - - testcase TC_NegSem_050402_actual_parameters_049(inout integer p_val) runs on GeneralComp { - if (p_val == 9) { setverdict(pass); } - else { setverdict(fail); } + + testcase TC_NegSem_050402_actual_parameters_083() runs on GeneralComp { + t.start; + a_test(c_val); // tested parameter passing } control { - var integer v_val := 5; - execute(TC_NegSem_050402_actual_parameters_049(10 + f_ret() - v_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_083()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of constant `@NegSem_050402_actual_parameters_083.c_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_050 negative test +:h3. NegSem_050402_actual_parameters_084 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_050 verify that template parameters cannot be used as inout formal value parameters of test cases > +<TC - 050402_084 verify that function calls cannot be used as inout formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_050 NegSem_050402_actual_parameters_050.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_084 NegSem_050402_actual_parameters_084.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_050 { +module NegSem_050402_actual_parameters_084 { type component GeneralComp { - } + timer t := 0.0; + } - template integer m_msg := 1; + function f_ret() return integer { + return 5; + } + + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } - testcase TC_NegSem_050402_actual_parameters_050(inout integer p_val) runs on GeneralComp { - if (p_val == 1) { setverdict(pass); } - else { setverdict(fail); } + testcase TC_NegSem_050402_actual_parameters_084() runs on GeneralComp { + t.start; + a_test(f_ret()); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_050(m_msg)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_084()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template `@NegSem_050402_actual_parameters_050.m_msg' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of function `@NegSem_050402_actual_parameters_084.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_051 negative test +:h3. NegSem_050402_actual_parameters_085 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_051 verify that template variables cannot be used as inout formal value parameters of test cases > +<TC - 050402_085 verify that expressions cannot be used as inout formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_051 NegSem_050402_actual_parameters_051.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_085 NegSem_050402_actual_parameters_085.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variables cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. -module NegSem_050402_actual_parameters_051 { +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. + +module NegSem_050402_actual_parameters_085 { type component GeneralComp { - } + timer t := 0.0; + } - testcase TC_NegSem_050402_actual_parameters_051(inout integer p_val) runs on GeneralComp { - if (p_val == 2) { setverdict(pass); } - else { setverdict(fail); } + function f_ret() return integer { + return 4; + } + + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(9, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_085() runs on GeneralComp { + var integer v_val := 5; + t.start; + a_test(10 + f_ret() - v_val); // tested parameter passing } control { - var template integer vm_msg := 2; - execute(TC_NegSem_050402_actual_parameters_051(vm_msg)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_085()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `vm_msg' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_052 negative test +:h3. NegSem_050402_actual_parameters_086 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_052 verify that template in parameters cannot be used as inout formal value parameters of test cases > +<TC - 050402_086 verify that template parameters cannot be used as inout formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_052 NegSem_050402_actual_parameters_052.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_086 NegSem_050402_actual_parameters_086.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template in parameters cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value parameters, formal template parameters or references +// to elements of variables, template variables, formal value parameters or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_052 { +module NegSem_050402_actual_parameters_086 { type component GeneralComp { - } - - testcase TC_NegSem_050402_actual_parameters_052(inout integer p_val) runs on GeneralComp { - if (p_val == 3) { setverdict(pass); } - else { setverdict(fail); } - } + timer t := 0.0; + } + + template integer m_msg := 1; - function f_caller(in template integer p_val) { - execute(TC_NegSem_050402_actual_parameters_052(p_val)); // tested parameter passing + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } } + testcase TC_NegSem_050402_actual_parameters_086() runs on GeneralComp { + t.start; + a_test(m_msg); // tested parameter passing + } + control { - f_caller(3); // this parameter passing is not a subject of the test + execute(TC_NegSem_050402_actual_parameters_086()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of template `@NegSem_050402_actual_parameters_086.m_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_053 negative test +:h3. NegSem_050402_actual_parameters_087 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_053 verify that template in parameters cannot be used as inout formal value parameters of test cases > +<TC - 050402_087 verify that literals cannot be used as inout formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_053 NegSem_050402_actual_parameters_053.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_087 NegSem_050402_actual_parameters_087.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template out parameters cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_053 { +module NegSem_050402_actual_parameters_087 { type component GeneralComp { - } - - testcase TC_NegSem_050402_actual_parameters_053(inout integer p_val) runs on GeneralComp { - if (p_val == 4) { setverdict(pass); } + } + + testcase TC_NegSem_050402_actual_parameters_087(inout template integer p_val) runs on GeneralComp { + if (match(1, p_val)) { setverdict(pass); } else { setverdict(fail); } } - - function f_caller(out template integer p_val) { - p_val := 4; // out parameter shall have a value before we can pass it to a function - execute(TC_NegSem_050402_actual_parameters_053(p_val)); // tested parameter passing - } control { - var template integer vm_val; - f_caller(vm_val); + execute(TC_NegSem_050402_actual_parameters_087(1)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `out' template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_054 negative test +:h3. NegSem_050402_actual_parameters_088 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_054 verify that template inout parameters cannot be used as inout formal value parameters of test cases > +<TC - 050402_088 verify that module parameters cannot be used as inout formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_054 NegSem_050402_actual_parameters_054.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_088 NegSem_050402_actual_parameters_088.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template inout parameters cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_054 { +module NegSem_050402_actual_parameters_088 { type component GeneralComp { - } - - testcase TC_NegSem_050402_actual_parameters_054(inout integer p_val) runs on GeneralComp { - if (p_val == 5) { setverdict(pass); } + } + + modulepar integer PX_VAL := 2; + + testcase TC_NegSem_050402_actual_parameters_088(inout template integer p_val) runs on GeneralComp { + if (match(2, p_val)) { setverdict(pass); } else { setverdict(fail); } } - function f_caller(inout template integer p_val) { - execute(TC_NegSem_050402_actual_parameters_054(p_val)); // tested parameter passing - } - control { - var template integer vm_val := 5; - f_caller(vm_val); + execute(TC_NegSem_050402_actual_parameters_088(PX_VAL)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of `inout' template parameter `p_val' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of module parameter `@NegSem_050402_actual_parameters_088.PX_VAL' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_055 negative test +:h3. NegSem_050402_actual_parameters_089 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_055 verify that template variable element reference cannot be used as inout formal value parameters of test cases > +<TC - 050402_089 verify that constants cannot be used as inout formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_055 NegSem_050402_actual_parameters_055.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_089 NegSem_050402_actual_parameters_089.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template variable element reference cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_055 { +module NegSem_050402_actual_parameters_089 { + + type component GeneralComp { + } - type component GeneralComp { - } - - type record R { - integer field1 - } + const integer c_val := 3; - testcase TC_NegSem_050402_actual_parameters_055(inout integer p_val) runs on GeneralComp { - if (p_val == 10) { setverdict(pass); } + testcase TC_NegSem_050402_actual_parameters_089(inout template integer p_val) runs on GeneralComp { + if (match(3, p_val)) { setverdict(pass); } else { setverdict(fail); } } control { - var template R v_val := { field1 := 10 }; - execute(TC_NegSem_050402_actual_parameters_055(v_val.field1)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_089(c_val)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template variable `v_val' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of constant `@NegSem_050402_actual_parameters_089.c_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_056 negative test +:h3. NegSem_050402_actual_parameters_090 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_056 verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of test cases > +<TC - 050402_090 verify that function calls cannot be used as inout formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_056 NegSem_050402_actual_parameters_056.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_090 NegSem_050402_actual_parameters_090.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as inout formal value parameters of test cases + ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_056 { +module NegSem_050402_actual_parameters_090 { type component GeneralComp { } - type record R { - integer field1 - } + function f_ret() return integer { + return 5; + } - testcase TC_NegSem_050402_actual_parameters_056(inout integer p_val) runs on GeneralComp { - if (p_val == 11) { setverdict(pass); } - else { setverdict(fail); } + testcase TC_NegSem_050402_actual_parameters_090(inout template integer p_val) runs on GeneralComp { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } } - - function f_caller(in template R p_param) { - execute(TC_NegSem_050402_actual_parameters_056(p_param.field1)); // tested parameter passing - } control { - f_caller({field1 := 11 }); + execute(TC_NegSem_050402_actual_parameters_090(f_ret())); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a variable or value parameter was expected for an `inout' value parameter instead of template parameter `p_param' + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of function `@NegSem_050402_actual_parameters_090.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_057 negative test +:h3. NegSem_050402_actual_parameters_091 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_057 verify that literals cannot be used as out formal template parameters of functions > +<TC - 050402_091 verify that expressions cannot be used as inout formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_057 NegSem_050402_actual_parameters_057.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_091 NegSem_050402_actual_parameters_091.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of functions + ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_057 { +module NegSem_050402_actual_parameters_091 { type component GeneralComp { - } - - function f_test(out template integer p_val) { - p_val := ?; - setverdict(pass); } - - testcase TC_NegSem_050402_actual_parameters_057() runs on GeneralComp { - f_test(1); // tested parameter passing + + function f_ret() return integer { + return 4; + } + + testcase TC_NegSem_050402_actual_parameters_091(inout template integer p_val) runs on GeneralComp { + if (match(9, p_val)) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_057()); + var integer v_val := 5; + execute(TC_NegSem_050402_actual_parameters_091(10 + f_ret() - v_val)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter + error: Reference to a template variable or template parameter was expected for an `inout' template parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_058 negative test +:h3. NegSem_050402_actual_parameters_092 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_058 verify that module parameters cannot be used as out formal template parameters of functions > +<TC - 050402_092 verify that template parameters cannot be used as inout formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_058 NegSem_050402_actual_parameters_058.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_092 NegSem_050402_actual_parameters_092.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of functions + ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Actual parameters that are passed to inout formal template parameters shall be variables, +// template variables, formal value or template parameters (of in, inout or out +// parameterization) of the current scope or references to elements of (template) variables +// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_058 { +module NegSem_050402_actual_parameters_092 { type component GeneralComp { - } - - modulepar integer PX_VAL := 2; + } - function f_test(out template integer p_val) { - p_val := ?; - setverdict(pass); - } + template integer m_msg := 1; - testcase TC_NegSem_050402_actual_parameters_058() runs on GeneralComp { - f_test(PX_VAL); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_092(inout template integer p_val) runs on GeneralComp { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_058()); + execute(TC_NegSem_050402_actual_parameters_092(m_msg)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of module parameter + error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of template `@NegSem_050402_actual_parameters_092.m_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_059 negative test +:h3. NegSem_050402_actual_parameters_093 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_059 verify that constants cannot be used as out formal template parameters of functions > +<TC - 050402_093 verify that referencing errors are detected in actual parameters passed to in formal value parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_059 NegSem_050402_actual_parameters_059.ttcn > +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_050402_actual_parameters_093 NegSem_050402_actual_parameters_093.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of functions + ** @purpose 1:5.4.2, verify that referencing errors are detected in actual parameters passed to in formal value parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// When actual parameters that are passed to in formal value or template parameters +// contain a value or template reference, rules for using references on the right hand +// side of assignments apply. -module NegSem_050402_actual_parameters_059 { +module NegSem_050402_actual_parameters_093 { type component GeneralComp { - } - - const integer c_val := 3; + } - function f_test(out template integer p_val) { - p_val := ?; - setverdict(pass); + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional } - testcase TC_NegSem_050402_actual_parameters_059() runs on GeneralComp { - f_test(c_val); // tested parameter passing + function f_test(in integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_093() runs on GeneralComp { + var R v_rec := { + field1 := 1, + field2 := omit + } + f_test(v_rec.field2.subfield1); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_059()); + execute(TC_NegSem_050402_actual_parameters_093()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of constant +Dynamic test case error: Using the value of an optional field containing omit <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_060 negative test +:h3. NegSem_050402_actual_parameters_094 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_060 verify that function calls cannot be used as out formal template parameters of functions > +<TC - 050402_094 verify that referencing errors are detected in actual parameters passed to in formal template parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_060 NegSem_050402_actual_parameters_060.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_094 NegSem_050402_actual_parameters_094.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of functions + ** @purpose 1:5.4.2, verify that referencing errors are detected in actual parameters passed to in formal template parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// When actual parameters that are passed to in formal value or template parameters +// contain a value or template reference, rules for using references on the right hand +// side of assignments apply. -module NegSem_050402_actual_parameters_060 { +module NegSem_050402_actual_parameters_094 { type component GeneralComp { - } + } - function f_ret() return integer { - return 5; + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional } - function f_test(out template integer p_val) { - p_val := ?; - setverdict(pass); + template R mw_rec := { + field1 := 1, + field2 := * } - testcase TC_NegSem_050402_actual_parameters_060() runs on GeneralComp { - f_test(f_ret()); // tested parameter passing + function f_test(in template integer p_val) { + if (match(255, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_094() runs on GeneralComp { + f_test(mw_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) } control { - execute(TC_NegSem_050402_actual_parameters_060()); + execute(TC_NegSem_050402_actual_parameters_094()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of function +error: Reference to field `subfield1' of any or omit `@NegSem_050402_actual_parameters_094.mw_rec.field2' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_061 negative test +:h3. NegSem_050402_actual_parameters_095 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_061 verify that expressions cannot be used as out formal template parameters of functions > +<TC - 050402_095 verify that referencing errors are detected in actual parameters passed to in formal template parameters > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_050402_actual_parameters_061 NegSem_050402_actual_parameters_061.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_095 NegSem_050402_actual_parameters_095.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of functions + ** @purpose 1:5.4.2, verify that referencing errors are detected in actual parameters passed to out formal template parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// When actual parameters that are passed to inout and out formal value or template +// parameters contain a value or template reference, rules for using references on +// the left hand side of assignments apply. -module NegSem_050402_actual_parameters_061 { +module NegSem_050402_actual_parameters_095 { type component GeneralComp { - } + } - function f_ret() return integer { - return 4; + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional } - + function f_test(out template integer p_val) { - p_val := ?; - setverdict(pass); + p_val := 10; } - - testcase TC_NegSem_050402_actual_parameters_061() runs on GeneralComp { - var integer v_val := 5; - f_test(10 + f_ret() - v_val); // tested parameter passing + + testcase TC_NegSem_050402_actual_parameters_095() runs on GeneralComp { + var template R v_rec := { + field1 := 1, + field2 := ({ subfield1 := 0, subfield2 := 1}, { subfield1 := 2, subfield2 := 3 }) + }; + f_test(v_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) + if (valueof(v_rec.field2.subfield1) == 10 and match(0, v_rec.field2.subfield2)) { setverdict(pass); } + else { setverdict(fail); } + } control { - execute(TC_NegSem_050402_actual_parameters_061()); + execute(TC_NegSem_050402_actual_parameters_095()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter +Dynamic test case error: Matching with an uninitialized/unsupported integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_062 negative test +:h3. NegSem_050402_actual_parameters_096 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_062 verify that template parameters cannot be used as out formal template parameters of functions > +<TC - 050402_096 verify that referencing rules are correctly applied to actual parameters of inout formal template parameters > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_050402_actual_parameters_062 NegSem_050402_actual_parameters_062.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_096 NegSem_050402_actual_parameters_096.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of functions + ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of inout formal template parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// When actual parameters that are passed to inout and out formal value or template +// parameters contain a value or template reference, rules for using references on +// the left hand side of assignments apply. -module NegSem_050402_actual_parameters_062 { +module NegSem_050402_actual_parameters_096 { type component GeneralComp { } - template integer m_msg := 1; - - function f_test(out template integer p_val) { - p_val := ?; - setverdict(pass); + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional } - testcase TC_NegSem_050402_actual_parameters_062() runs on GeneralComp { - f_test(m_msg); // tested parameter passing + function f_test(inout template integer p_val) { + p_val := 10; + } + + testcase TC_NegSem_050402_actual_parameters_096() runs on GeneralComp { + var template R v_rec := { + field1 := 1, + field2 := ({ subfield1 := 0, subfield2 := 1}, { subfield1 := 2, subfield2 := 3 }) + }; + // expected error since v_rec.field2.subfield1 not defined since v_rec.field2 is not *, ? or omit (see expansion rules) + f_test(v_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) + log(v_rec); + if (valueof(v_rec.field2.subfield1) == 10 and match(0, v_rec.field2.subfield2)) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_062()); + execute(TC_NegSem_050402_actual_parameters_096()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of template `@NegSem_050402_actual_parameters_062.m_msg' +Dynamic test case error: Matching with an uninitialized/unsupported integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_063 negative test +:h3. NegSem_050402_actual_parameters_097 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_063 verify that literals cannot be used as out formal template parameters of altsteps > +<TC - 050402_097 verify that string item references cannot be used as inout formal value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_063 NegSem_050402_actual_parameters_063.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_097 NegSem_050402_actual_parameters_097.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that string item references cannot be used as inout formal value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Actual parameters that are passed to inout formal value parameters shall be variables +// or formal value parameters (of in, inout or out parameterization) or references to +// elements of variables or formal value parameters of structured types. +// (see also the NOTE from 5.4.2) -module NegSem_050402_actual_parameters_063 { +module NegSem_050402_actual_parameters_097 { type component GeneralComp { - timer t := 0.0; } - - altstep a_test(out template integer p_val) runs on GeneralComp { - []t.timeout { - p_val := ?; - setverdict(pass); - } + + function f_test(inout charstring p_val) { + if (p_val == "t") { setverdict(pass); } + else { setverdict(fail); } + p_val := "r"; } - testcase TC_NegSem_050402_actual_parameters_063() runs on GeneralComp { - t.start; - a_test(1); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_097() runs on GeneralComp { + var charstring v_val := "test"; + f_test(v_val[0]); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_063()); + execute(TC_NegSem_050402_actual_parameters_097()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter +error: Reference to a string element of type `charstring' cannot be used in this context <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_064 negative test +:h3. NegSem_050402_actual_parameters_098 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_064 verify that module parameters cannot be used as out formal template parameters of altsteps > +<TC - 050402_098 verify that ordinary values cannot be passed to timer parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_064 NegSem_050402_actual_parameters_064.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_098 NegSem_050402_actual_parameters_098.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that ordinary values cannot be passed to timer parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Actual parameters that are passed to formal timer parameters shall be component +// timers, local timers or formal timer parameters of the current scope. -module NegSem_050402_actual_parameters_064 { +module NegSem_050402_actual_parameters_098 { type component GeneralComp { - timer t := 0.0; - } - - modulepar integer PX_VAL := 2; + } - altstep a_test(out template integer p_val) runs on GeneralComp { - []t.timeout { - p_val := ?; - setverdict(pass); - } + function f_test(timer t_par) { + t_par.start; + if (t_par.running) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_064() runs on GeneralComp { - t.start; - a_test(PX_VAL); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_098() runs on GeneralComp { + f_test(5.0); // tested parameter passing: it should not be possible to pass a float value to a timer parameter } control { - execute(TC_NegSem_050402_actual_parameters_064()); + execute(TC_NegSem_050402_actual_parameters_098()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of module parameter +error: Reference to a timer or timer parameter was expected for a timer parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_065 negative test +:h3. NegSem_050402_actual_parameters_099 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_065 verify that constants cannot be used as out formal template parameters of altsteps > +<TC - 050402_099 verify that values cannot be passed to port parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_065 NegSem_050402_actual_parameters_065.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_099 NegSem_050402_actual_parameters_099.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that values cannot be passed to port parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Actual parameters that are passed to formal port parameters shall be component +// ports or formal port parameters of the current scope. -module NegSem_050402_actual_parameters_065 { +module NegSem_050402_actual_parameters_099 { + type port IntPort message { + inout integer; + } + type component GeneralComp { - timer t := 0.0; - } - - const integer c_val := 3; + port IntPort p; + } - altstep a_test(out template integer p_val) runs on GeneralComp { - []t.timeout { - p_val := ?; - setverdict(pass); - } + function f_test(IntPort p_port) { + p_port.stop; } - testcase TC_NegSem_050402_actual_parameters_065() runs on GeneralComp { - t.start; - a_test(c_val); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_099() runs on GeneralComp { + var integer v_val := 5; + f_test(v_val); // tested parameter passing + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_065()); + execute(TC_NegSem_050402_actual_parameters_099()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of constant +error: Reference to a port or port parameter was expected for a port parameter instead of variable `v_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_066 negative test +:h3. NegSem_050402_actual_parameters_100 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_066 verify that function calls cannot be used as out formal template parameters of altsteps > +<TC - 050402_100 verify that list notation containing actual parameters in wrong order is not accepted > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_066 NegSem_050402_actual_parameters_066.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_100 NegSem_050402_actual_parameters_100.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that list notation containing actual parameters in wrong order is not accepted ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// When using list notation, the order of elements in the actual parameter list shall +// be the same as their order in the corresponding formal parameter list. -module NegSem_050402_actual_parameters_066 { +module NegSem_050402_actual_parameters_100 { type component GeneralComp { - timer t := 0.0; - } - - function f_ret() return integer { - return 5; - } - - altstep a_test(out template integer p_val) runs on GeneralComp { - []t.timeout { - p_val := ?; - setverdict(pass); - } + } + + function f_test (integer p_val1, charstring p_val2) { + if ( match(p_val1, 1) and match(p_val2, "test")) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_066() runs on GeneralComp { - t.start; - a_test(f_ret()); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_100() runs on GeneralComp { + f_test("test", 1); } control { - execute(TC_NegSem_050402_actual_parameters_066()); + execute(TC_NegSem_050402_actual_parameters_100()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of function +error: integer value was expected +<END_RESULT> +<RESULT COUNT 1> +error: character string value was expected <END_RESULT> - <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_067 negative test +:h3. NegSem_050402_actual_parameters_101 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_067 verify that expressions cannot be used as out formal template parameters of altsteps > +<TC - 050402_101 verify that list notation containing less actual parameters than required is not accepted > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_067 NegSem_050402_actual_parameters_067.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_101 NegSem_050402_actual_parameters_101.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of altsteps - ** @verdict pass reject - ***************************************************/ - -// The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. - -module NegSem_050402_actual_parameters_067 { - - type component GeneralComp { - timer t := 0.0; - } - - function f_ret() return integer { - return 4; - } - - altstep a_test(out template integer p_val) runs on GeneralComp { - []t.timeout { - p_val := ?; - setverdict(pass); - } + ** @purpose 1:5.4.2, verify that list notation containing less actual parameters than required is not accepted + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For each formal parameter without a default there shall be an actual parameter. + +module NegSem_050402_actual_parameters_101 { + + type component GeneralComp { + } + + function f_test (integer p_val1, charstring p_val2) { + if (p_val1 == 1) { setverdict(pass); } + else { setverdict(fail); } } - - testcase TC_NegSem_050402_actual_parameters_067() runs on GeneralComp { - var integer v_val := 5; - t.start; - a_test(10 + f_ret() - v_val); // tested parameter passing + + testcase TC_NegSem_050402_actual_parameters_101() runs on GeneralComp { + f_test(1); } control { - execute(TC_NegSem_050402_actual_parameters_067()); + execute(TC_NegSem_050402_actual_parameters_101()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter +error: Too few parameters: 2 was expected instead of 1 <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_068 negative test +:h3. NegSem_050402_actual_parameters_102 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_068 verify that template parameters cannot be used as out formal template parameters of altsteps > +<TC - 050402_102 verify that parameter without default value cannot be skipped > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_068 NegSem_050402_actual_parameters_068.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_102 NegSem_050402_actual_parameters_102.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that parameter without default value cannot be skipped ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// For each formal parameter without a default there shall be an actual parameter. -module NegSem_050402_actual_parameters_068 { +module NegSem_050402_actual_parameters_102 { type component GeneralComp { - timer t := 0.0; - } + } - template integer m_msg := 1; - - altstep a_test(out template integer p_val) runs on GeneralComp { - []t.timeout { - p_val := ?; - setverdict(pass); - } + function f_test (integer p_val1, charstring p_val2) { + if (p_val1 == 1) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_068() runs on GeneralComp { - t.start; - a_test(m_msg); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_102() runs on GeneralComp { + f_test(1, -); } control { - execute(TC_NegSem_050402_actual_parameters_068()); + execute(TC_NegSem_050402_actual_parameters_102()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of template +error: Not used symbol \(`-'\) cannot be used for parameter that does not have default value <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_069 negative test +:h3. NegSem_050402_actual_parameters_103 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_069 verify that literals cannot be used as out formal template parameters of test cases > +<TC - 050402_103 verify that mixing list and assignment notation is not allowed in parameterized calls (value as actual parameter) > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_069 NegSem_050402_actual_parameters_069.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_103 NegSem_050402_actual_parameters_103.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of test cases + ** @purpose 1:5.4.2, verify that mixing list and assignment notation is not allowed in parameterized calls (value as actual parameter) ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Either list notation or assignment notation shall be used in a single parameter +// list. They shall not be mixed. -module NegSem_050402_actual_parameters_069 { +module NegSem_050402_actual_parameters_103 { type component GeneralComp { - } + } - testcase TC_NegSem_050402_actual_parameters_069(out template integer p_val) runs on GeneralComp { - p_val := ?; - setverdict(pass); + function f_test (integer p_val1, charstring p_val2) { + if ( match(p_val1, 1) and match(p_val2, "test")) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_103() runs on GeneralComp { + f_test(p_val1 := 1, "test"); } control { - execute(TC_NegSem_050402_actual_parameters_069(1)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_103()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter +error: at or before token `"': syntax error, unexpected Cstring <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_070 negative test +:h3. NegSem_050402_actual_parameters_104 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_070 verify that module parameters cannot be used as out formal template parameters of test cases > +<TC - 050402_104 verify that mixing list and assignment notation is not allowed in parameterized calls (skipped actual parameter) > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_070 NegSem_050402_actual_parameters_070.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_104 NegSem_050402_actual_parameters_104.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of test cases + ** @purpose 1:5.4.2, verify that mixing list and assignment notation is not allowed in parameterized calls (skipped actual parameter) ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Either list notation or assignment notation shall be used in a single parameter +// list. They shall not be mixed. -module NegSem_050402_actual_parameters_070 { +module NegSem_050402_actual_parameters_104 { type component GeneralComp { - } + } - modulepar integer PX_VAL := 2; + function f_test (integer p_val1, charstring p_val2 := "test") { + if ( match(p_val1, 1) and match(p_val2, "test")) { setverdict(pass); } + else { setverdict(fail); } + } - testcase TC_NegSem_050402_actual_parameters_070(out template integer p_val) runs on GeneralComp { - p_val := ?; - setverdict(pass); + testcase TC_NegSem_050402_actual_parameters_104() runs on GeneralComp { + f_test(p_val1 := 1, -); } control { - execute(TC_NegSem_050402_actual_parameters_070(PX_VAL)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_104()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of module parameter `@NegSem_050402_actual_parameters_070.PX_VAL' +error: at or before token `-': syntax error, unexpected '-' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_071 negative test +:h3. NegSem_050402_actual_parameters_105 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_071 verify that constants cannot be used as out formal template parameters of test cases > +<TC - 050402_105 verify that parameters cannot be assigned more than once in assignment notation > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_071 NegSem_050402_actual_parameters_071.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_105 NegSem_050402_actual_parameters_105.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of test cases + ** @purpose 1:5.4.2, verify that parameters cannot be assigned more than once in assignment notation ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// When using assignment notation, each formal parameter shall be assigned an actual +// parameter at most once. -module NegSem_050402_actual_parameters_071 { +module NegSem_050402_actual_parameters_105 { type component GeneralComp { - } + } - const integer c_val := 3; + function f_test (integer p_val1, charstring p_val2) { + if (match(p_val1 == 1 and p_val2 == "test") { setverdict(pass); } + else { setverdict(fail); } + } - testcase TC_NegSem_050402_actual_parameters_071(out template integer p_val) runs on GeneralComp { - p_val := ?; - setverdict(pass); + testcase TC_NegSem_050402_actual_parameters_105() runs on GeneralComp { + f_test(p_val1 := 1, p_val2 := "test", p_val1 := 1); } control { - execute(TC_NegSem_050402_actual_parameters_071(c_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_105()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of constant +error: at or before token `\)': syntax error, unexpected '\)' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_072 negative test +:h3. NegSem_050402_actual_parameters_106 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_072 verify that function calls cannot be used as out formal template parameters of test cases > +<TC - 050402_106 verify that assignment notation that doesn't contain all parameters is not accepted > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_072 NegSem_050402_actual_parameters_072.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_106 NegSem_050402_actual_parameters_106.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of test cases + ** @purpose 1:5.4.2, verify that assignment notation that doesn't contain all parameters is not accepted ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// For each formal parameter without default value, there shall be an actual parameter. -module NegSem_050402_actual_parameters_072 { +module NegSem_050402_actual_parameters_106 { type component GeneralComp { - } - - function f_ret() return integer { - return 5; + } + + function f_test (integer p_val1, charstring p_val2, integer p_val3) { + if (match(p_val1, 1) and match(p_val2, "test") and match(p_val3, 3)) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_072(out template integer p_val) runs on GeneralComp { - p_val := ?; - setverdict(pass); + testcase TC_NegSem_050402_actual_parameters_106() runs on GeneralComp { + f_test(p_val2 := "test", p_val3 := 3); } control { - execute(TC_NegSem_050402_actual_parameters_072(f_ret())); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_106()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of function `@NegSem_050402_actual_parameters_072.f_ret' +error: Parameter not specified <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_073 negative test +:h3. NegSem_050402_actual_parameters_107 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_073 verify that expressions cannot be used as out formal template parameters of test cases > +<TC - 050402_107 verify that incompatible values cannot be passed to in formal parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_073 NegSem_050402_actual_parameters_073.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_107 NegSem_050402_actual_parameters_107.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of test cases + ** @purpose 1:5.4.2, verify that incompatible values cannot be passed to in formal parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// The type of each actual parameter shall be compatible with the type of each +// corresponding formal parameter. -module NegSem_050402_actual_parameters_073 { +module NegSem_050402_actual_parameters_107 { type component GeneralComp { - } + } - function f_ret() return integer { - return 4; + type record R1 { + integer field1, + integer field2 } - testcase TC_NegSem_050402_actual_parameters_073(out template integer p_val) runs on GeneralComp { - p_val := ?; - setverdict(pass); + type record R2 { + integer elem1, + integer elem2 optional + } + + function f_test (R1 p_val) { + if (p_val == { field1 := 1, field2 := 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_107() runs on GeneralComp { + var R2 v_rec := { 1, 2 }; + f_test(v_rec); } control { - var integer v_val := 5; - execute(TC_NegSem_050402_actual_parameters_073(10 + f_ret() - v_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_107()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter +error: Type mismatch: `@NegSem_050402_actual_parameters_107.R1.field2' of type `integer' and `@NegSem_050402_actual_parameters_107.R2.elem2' of type `integer' are not compatible: The optionality of fields in record/SEQUENCE types must be the same <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_074 negative test +:h3. NegSem_050402_actual_parameters_108 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_074 verify that template parameters cannot be used as out formal template parameters of test cases > +<TC - 050402_108 verify that incompatible values cannot be passed from out formal parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_074 NegSem_050402_actual_parameters_074.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_108 NegSem_050402_actual_parameters_108.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of test cases + ** @purpose 1:5.4.2, verify that incompatible values cannot be passed from out formal parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// The type of each actual parameter shall be compatible with the type of each +// corresponding formal parameter. -module NegSem_050402_actual_parameters_074 { +module NegSem_050402_actual_parameters_108 { type component GeneralComp { } - template integer m_msg := 1; + type record R1 { + integer field1, + integer field2 optional + } + + type record R2 { + integer elem1, + integer elem2 + } - testcase TC_NegSem_050402_actual_parameters_074(out template integer p_val) runs on GeneralComp { - p_val := ?; - setverdict(pass); + function f_test (out R1 p_val) { + p_val.field1 := 1; + p_val.field2 := 2; + } + + testcase TC_NegSem_050402_actual_parameters_108() runs on GeneralComp { + var R2 v_rec; + f_test(v_rec); + if (v_rec == { elem1 := 1, elem2 := 2 }) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_074(m_msg)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_108()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of template `@NegSem_050402_actual_parameters_074.m_msg' +error: Type mismatch: `@NegSem_050402_actual_parameters_108.R1.field2' of type `integer' and `@NegSem_050402_actual_parameters_108.R2.elem2' of type `integer' are not compatible: The optionality of fields in record/SEQUENCE types must be the same <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_075 negative test +:h3. NegSem_050402_actual_parameters_109 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_075 verify that literals cannot be used as inout formal template parameters of functions > +<TC - 050402_109 verify that incompatible values cannot be passed to inout formal parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_075 NegSem_050402_actual_parameters_075.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_109 NegSem_050402_actual_parameters_109.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal template parameters of functions + ** @purpose 1:5.4.2, verify that incompatible values cannot be passed to inout formal parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Strong typing is required for parameters passed by reference. -module NegSem_050402_actual_parameters_075 { +module NegSem_050402_actual_parameters_109 { type component GeneralComp { - } + } + + type record R1 { + integer field1, + integer field2 optional + } + + type record R2 { + integer elem1, + integer elem2 + } - function f_test(inout template integer p_val) { - if (match(1, p_val)) { setverdict(pass); } + function f_test (inout R1 p_val) { + if (p_val == { field1 := 1, field2 := 2 }) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_075() runs on GeneralComp { - f_test(1); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_109() runs on GeneralComp { + var R2 v_rec := { 1, 2 }; + f_test(v_rec); } control { - execute(TC_NegSem_050402_actual_parameters_075()); + execute(TC_NegSem_050402_actual_parameters_109()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter +error: Type mismatch: `@NegSem_050402_actual_parameters_109.R1.field2' of type `integer' and `@NegSem_050402_actual_parameters_109.R2.elem2' of type `integer' are not compatible: The optionality of fields in record/SEQUENCE types must be the same <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_076 negative test +:h3. NegSem_050402_actual_parameters_111 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_076 verify that module parameters cannot be used as inout formal template parameters of functions > +<TC - 050402_111 verify that incompatible templates cannot be passed to template parameters with omit restriction > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_076 NegSem_050402_actual_parameters_076.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_111 NegSem_050402_actual_parameters_111.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal template parameters of functions + ** @purpose 1:5.4.2, verify that incompatible templates cannot be passed to template parameters with omit restriction ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. -module NegSem_050402_actual_parameters_076 { +module NegSem_050402_actual_parameters_111 { type component GeneralComp { - } + } - modulepar integer PX_VAL := 2; - - function f_test(inout template integer p_val) { - if (match(2, p_val)) { setverdict(pass); } + function f_test (omit integer p_val) { + if (match(1, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_076() runs on GeneralComp { - f_test(PX_VAL); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_111() runs on GeneralComp { + f_test((0..10)); } control { - execute(TC_NegSem_050402_actual_parameters_076()); + execute(TC_NegSem_050402_actual_parameters_111()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of module parameter `@NegSem_050402_actual_parameters_076.PX_VAL' +error: Restriction on template formal parameter does not allow usage of value range match <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_077 negative test +:h3. NegSem_050402_actual_parameters_112 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_077 verify that constants cannot be used as inout formal template parameters of functions > +<TC - 050402_112 verify that compatible templates can be passed to template parameters with value restriction > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_077 NegSem_050402_actual_parameters_077.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_112 NegSem_050402_actual_parameters_112.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal template parameters of functions + ** @purpose 1:5.4.2, verify that compatible templates can be passed to template parameters with value restriction ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. -module NegSem_050402_actual_parameters_077 { +module NegSem_050402_actual_parameters_112 { type component GeneralComp { - } + } - const integer c_val := 3; - - function f_test(inout template integer p_val) { - if (match(3, p_val)) { setverdict(pass); } + function f_test (template(value) integer p_val) { + if (match(1, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_077() runs on GeneralComp { - f_test(c_val); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_112() runs on GeneralComp { + f_test((1, 2, 3)); } control { - execute(TC_NegSem_050402_actual_parameters_077()); + execute(TC_NegSem_050402_actual_parameters_112()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of constant `@NegSem_050402_actual_parameters_077.c_val' +error: Restriction on template formal parameter does not allow usage of value list match <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_078 negative test +:h3. NegSem_050402_actual_parameters_113 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_078 verify that constants cannot be used as inout formal template parameters of functions > +<TC - 050402_113 verify that compatible templates can be passed to template parameters with present restriction > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_078 NegSem_050402_actual_parameters_078.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_113 NegSem_050402_actual_parameters_113.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal template parameters of functions + ** @purpose 1:5.4.2, verify that compatible templates can be passed to template parameters with present restriction ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. -module NegSem_050402_actual_parameters_078 { +module NegSem_050402_actual_parameters_113 { type component GeneralComp { - } - - function f_ret() return integer { - return 5; - } - - function f_test(inout template integer p_val) { - if (match(5, p_val)) { setverdict(pass); } + } + + function f_test (template(present) integer p_val) { + if (match(1, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_078() runs on GeneralComp { - f_test(f_ret()); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_113() runs on GeneralComp { + f_test(*); } control { - execute(TC_NegSem_050402_actual_parameters_078()); + execute(TC_NegSem_050402_actual_parameters_113()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of function `@NegSem_050402_actual_parameters_078.f_ret' +error: Restriction on template formal parameter does not allow usage of any or omit <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_079 negative test +:h3. NegSem_050402_actual_parameters_114 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_079 verify that expressions cannot be used as inout formal template parameters of functions > +<TC - 050402_114 verify that compatible templates can be passed to template parameters with present restriction > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_079 NegSem_050402_actual_parameters_079.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_114 NegSem_050402_actual_parameters_114.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal template parameters of functions + ** @purpose 1:5.4.2, verify that parametrized entities used as actual parameter cannot be passed without parameter list ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// All parameterized entities specified as an actual parameter shall have their +// own parameters resolved in the top-level actual parameter list. -module NegSem_050402_actual_parameters_079 { +module NegSem_050402_actual_parameters_114 { type component GeneralComp { - } + } - function f_ret() return integer { - return 4; + type record R { + integer field1, + integer field2 optional } - - function f_test(inout template integer p_val) { - if (match(9, p_val)) { setverdict(pass); } + + template R mw_rec(template integer p_field2) := { + field1 := 1, + field2 := p_field2 + } + + function f_test (template R p_match) { + if (match({1, omit}, p_match)) { setverdict(pass); } else { setverdict(fail); } } - - testcase TC_NegSem_050402_actual_parameters_079() runs on GeneralComp { - var integer v_val := 5; - f_test(10 + f_ret() - v_val); // tested parameter passing + + testcase TC_NegSem_050402_actual_parameters_114() runs on GeneralComp { + f_test(mw_rec); } control { - execute(TC_NegSem_050402_actual_parameters_079()); + execute(TC_NegSem_050402_actual_parameters_114()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter +error: Reference to parameterized definition `mw_rec' without actual parameter list <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_080 negative test +:h3. NegSem_050402_actual_parameters_115 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_080 verify that template parameters cannot be used as inout formal template parameters of functions > +<TC - 050402_115 verify that error is generated when no actual parameter list is used for functions with no parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_080 NegSem_050402_actual_parameters_080.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_115 NegSem_050402_actual_parameters_115.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal template parameters of functions + ** @purpose 1:5.4.2, verify that error is generated when no actual parameter list is used for functions with no parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// If the formal parameter list of TTCN-3 objects function, testcase, signature, +// altstep or external function is empty, then the empty parentheses shall be +// included both in the declaration and in the invocation of that object. In all +// other cases the empty parentheses shall be omitted. -module NegSem_050402_actual_parameters_080 { +module NegSem_050402_actual_parameters_115 { type component GeneralComp { } - - template integer m_msg := 1; - - function f_test(inout template integer p_val) { - if (match(1, p_val)) { setverdict(pass); } - else { setverdict(fail); } + + function f_test () return integer { + setverdict(pass); + return 1; } - testcase TC_NegSem_050402_actual_parameters_080() runs on GeneralComp { - f_test(m_msg); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_115() runs on GeneralComp { + log(f_test); } control { - execute(TC_NegSem_050402_actual_parameters_080()); + execute(TC_NegSem_050402_actual_parameters_115()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of template `@NegSem_050402_actual_parameters_080.m_msg' +error: Reference to parameterized definition `f_test' without actual parameter list <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_081 negative test +:h3. NegSem_050402_actual_parameters_116 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_081 verify that literals cannot be used as inout formal template parameters of altsteps > +<TC - 050402_116 verify that error is generated when no actual parameter list is used for test cases with no parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_081 NegSem_050402_actual_parameters_081.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_116 NegSem_050402_actual_parameters_116.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that error is generated when no actual parameter list is used for test cases with no parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_081 { +// If the formal parameter list of TTCN-3 objects function, testcase, signature, +// altstep or external function is empty, then the empty parentheses shall be +// included both in the declaration and in the invocation of that object. In all +// other cases the empty parentheses shall be omitted. + +module NegSem_050402_actual_parameters_116 { type component GeneralComp { - timer t := 0.0; - } - - altstep a_test(inout template integer p_val) runs on GeneralComp { - []t.timeout { - if (match(1, p_val)) { setverdict(pass); } - else { setverdict(fail); } - } - } + } - testcase TC_NegSem_050402_actual_parameters_081() runs on GeneralComp { - t.start; - a_test(1); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_116() runs on GeneralComp { + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_081()); + execute(TC_NegSem_050402_actual_parameters_116); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter +error: at or before token `\)': syntax error, unexpected '\)', expecting '\(' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_082 negative test +:h3. NegSem_050402_actual_parameters_117 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_082 verify that module parameters cannot be used as inout formal template parameters of altsteps > +<TC - 050402_117 verify that error is generated when no actual parameter list is used for altsteps with no parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_082 NegSem_050402_actual_parameters_082.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_117 NegSem_050402_actual_parameters_117.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that error is generated when no actual parameter list is used for altsteps with no parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. -module NegSem_050402_actual_parameters_082 { +// If the formal parameter list of TTCN-3 objects function, testcase, signature, +// altstep or external function is empty, then the empty parentheses shall be +// included both in the declaration and in the invocation of that object. In all +// other cases the empty parentheses shall be omitted. + +module NegSem_050402_actual_parameters_117 { type component GeneralComp { - timer t := 0.0; - } + } - modulepar integer PX_VAL := 2; - - altstep a_test(inout template integer p_val) runs on GeneralComp { - []t.timeout { - if (match(2, p_val)) { setverdict(pass); } - else { setverdict(fail); } - } + altstep a_test () { + [] any timer.timeout { setverdict(pass); } } - testcase TC_NegSem_050402_actual_parameters_082() runs on GeneralComp { - t.start; - a_test(PX_VAL); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_117() runs on GeneralComp { + timer t_instant := 0.0; + t_instant.start; + alt { + [] a_test { + setverdict(pass); + } + } } control { - execute(TC_NegSem_050402_actual_parameters_082()); + execute(TC_NegSem_050402_actual_parameters_117()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of module parameter `@NegSem_050402_actual_parameters_082.PX_VAL' +error: at or before token `\{': syntax error, unexpected '\{' +<END_RESULT> +<RESULT COUNT 1> +error: at or before token `control': syntax error, unexpected ControlKeyword, expecting \$end <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_083 negative test +:h3. NegSem_050402_actual_parameters_118 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_083 verify that module parameters cannot be used as inout formal template parameters of altsteps > +<TC - 050402_118 verify that error is generated when empty actual parameter list is used for templates with no parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_083 NegSem_050402_actual_parameters_083.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_118 NegSem_050402_actual_parameters_118.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that error is generated when empty actual parameter list is used for templates with no parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// If the formal parameter list of TTCN-3 objects function, testcase, signature, +// altstep or external function is empty, then the empty parentheses shall be +// included both in the declaration and in the invocation of that object. In all +// other cases the empty parentheses shall be omitted. -module NegSem_050402_actual_parameters_083 { +module NegSem_050402_actual_parameters_118 { type component GeneralComp { - timer t := 0.0; - } + } - const integer c_val := 3; - - altstep a_test(inout template integer p_val) runs on GeneralComp { - []t.timeout { - if (match(3, p_val)) { setverdict(pass); } - else { setverdict(fail); } - } - } + template integer mw_allInt := ?; - testcase TC_NegSem_050402_actual_parameters_083() runs on GeneralComp { - t.start; - a_test(c_val); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_118() runs on GeneralComp { + if (match(1, mw_allInt())) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_083()); + execute(TC_NegSem_050402_actual_parameters_118()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of constant `@NegSem_050402_actual_parameters_083.c_val' +error: The referenced template `@NegSem_050402_actual_parameters_118.mw_allInt' cannot have actual parameters <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_084 negative test +:h3. NegSem_050402_actual_parameters_146 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_084 verify that function calls cannot be used as inout formal template parameters of altsteps > +<TC - 050402_146 verify that literal cannot be used as actual out value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_084 NegSem_050402_actual_parameters_084.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_146 NegSem_050402_actual_parameters_146.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that literal cannot be used as actual out value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_084 { +module NegSem_050402_actual_parameters_146 { type component GeneralComp { - timer t := 0.0; } - - function f_ret() return integer { - return 5; + + function f_test(out integer p_val) { + p_val := 9 } - altstep a_test(inout template integer p_val) runs on GeneralComp { - []t.timeout { - if (match(5, p_val)) { setverdict(pass); } - else { setverdict(fail); } - } - } - - testcase TC_NegSem_050402_actual_parameters_084() runs on GeneralComp { - t.start; - a_test(f_ret()); // tested parameter passing + testcase TC_NegSem_050402_actual_parameters_146() runs on GeneralComp { + f_test(1); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_084()); + execute(TC_NegSem_050402_actual_parameters_146()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of function `@NegSem_050402_actual_parameters_084.f_ret' +error: Reference to a variable or value parameter was expected for an `out' value parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_085 negative test +:h3. NegSem_050402_actual_parameters_147 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_085 verify that expressions cannot be used as inout formal template parameters of altsteps > +<TC - 050402_147 verify that expression cannot be used as actual out value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_085 NegSem_050402_actual_parameters_085.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_147 NegSem_050402_actual_parameters_147.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that expression cannot be used as actual out value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_085 { +module NegSem_050402_actual_parameters_147 { type component GeneralComp { - timer t := 0.0; } - + function f_ret() return integer { return 4; } - - altstep a_test(inout template integer p_val) runs on GeneralComp { - []t.timeout { - if (match(9, p_val)) { setverdict(pass); } - else { setverdict(fail); } - } + + function f_test(out integer p_val) { + p_val := 9 } - testcase TC_NegSem_050402_actual_parameters_085() runs on GeneralComp { + testcase TC_NegSem_050402_actual_parameters_147() runs on GeneralComp { var integer v_val := 5; - t.start; - a_test(10 + f_ret() - v_val); // tested parameter passing + f_test(10 + f_ret() - v_val); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_085()); + execute(TC_NegSem_050402_actual_parameters_147()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter +error: Reference to a variable or value parameter was expected for an `out' value parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_086 negative test +:h3. NegSem_050402_actual_parameters_148 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_086 verify that template parameters cannot be used as inout formal template parameters of altsteps > +<TC - 050402_148 verify that function calls cannot be used as actual out value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_086 NegSem_050402_actual_parameters_086.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_148 NegSem_050402_actual_parameters_148.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal template parameters of altsteps + ** @purpose 1:5.4.2, verify that function calls cannot be used as actual out value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template -// parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_086 { +module NegSem_050402_actual_parameters_148 { type component GeneralComp { - timer t := 0.0; - } - - template integer m_msg := 1; - - altstep a_test(inout template integer p_val) runs on GeneralComp { - []t.timeout { - if (match(1, p_val)) { setverdict(pass); } - else { setverdict(fail); } - } + } + + function f_ret() return integer { + return 4; } - testcase TC_NegSem_050402_actual_parameters_086() runs on GeneralComp { - t.start; - a_test(m_msg); // tested parameter passing + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_148() runs on GeneralComp { + f_test(f_ret()); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_086()); + execute(TC_NegSem_050402_actual_parameters_148()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of template `@NegSem_050402_actual_parameters_086.m_msg' +error: Reference to a variable or value parameter was expected for an `out' value parameter instead of function `@NegSem_050402_actual_parameters_148.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_087 negative test +:h3. NegSem_050402_actual_parameters_149 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_087 verify that literals cannot be used as inout formal template parameters of test cases > +<TC - 050402_149 verify that module parameters cannot be used as actual out value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_087 NegSem_050402_actual_parameters_087.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_149 NegSem_050402_actual_parameters_149.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that literals cannot be used as inout formal template parameters of test cases + ** @purpose 1:5.4.2, verify that module parameters cannot be used as actual out value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_087 { +module NegSem_050402_actual_parameters_149 { type component GeneralComp { - } + } + + modulepar integer PX_VAL := 2; - testcase TC_NegSem_050402_actual_parameters_087(inout template integer p_val) runs on GeneralComp { - if (match(1, p_val)) { setverdict(pass); } - else { setverdict(fail); } + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_149() runs on GeneralComp { + f_test(PX_VAL); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_087(1)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_149()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter +error: Reference to a variable or value parameter was expected for an `out' value parameter instead of module parameter `@NegSem_050402_actual_parameters_149.PX_VAL' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_088 negative test +:h3. NegSem_050402_actual_parameters_150 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_088 verify that module parameters cannot be used as inout formal template parameters of test cases > +<TC - 050402_150 verify that templates cannot be used as actual out value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_088 NegSem_050402_actual_parameters_088.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_150 NegSem_050402_actual_parameters_150.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that module parameters cannot be used as inout formal template parameters of test cases + ** @purpose 1:5.4.2, verify that templates cannot be used as actual out value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_088 { +module NegSem_050402_actual_parameters_150 { type component GeneralComp { - } - - modulepar integer PX_VAL := 2; + } + + template integer mw_msg := ?; - testcase TC_NegSem_050402_actual_parameters_088(inout template integer p_val) runs on GeneralComp { - if (match(2, p_val)) { setverdict(pass); } - else { setverdict(fail); } + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_150() runs on GeneralComp { + f_test(mw_msg); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_088(PX_VAL)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_150()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of module parameter `@NegSem_050402_actual_parameters_088.PX_VAL' + error: Reference to a variable or value parameter was expected for an `out' value parameter instead of template `@NegSem_050402_actual_parameters_150.mw_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_089 negative test +:h3. NegSem_050402_actual_parameters_151 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_089 verify that constants cannot be used as inout formal template parameters of test cases > +<TC - 050402_151 verify that constants cannot be used as actual out value parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_089 NegSem_050402_actual_parameters_089.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_151 NegSem_050402_actual_parameters_151.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that constants cannot be used as inout formal template parameters of test cases + ** @purpose 1:5.4.2, verify that constants cannot be used as actual out value parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_089 { +module NegSem_050402_actual_parameters_151 { type component GeneralComp { - } - - const integer c_val := 3; - - testcase TC_NegSem_050402_actual_parameters_089(inout template integer p_val) runs on GeneralComp { - if (match(3, p_val)) { setverdict(pass); } - else { setverdict(fail); } + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_151() runs on GeneralComp { + const integer c_val := 3; + f_test(c_val); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_089(c_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_151()); } } <END_MODULE> + <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of constant `@NegSem_050402_actual_parameters_089.c_val' + error: Reference to a variable or value parameter was expected for an `out' value parameter instead of constant `c_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_090 negative test +:h3. NegSem_050402_actual_parameters_152 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_090 verify that function calls cannot be used as inout formal template parameters of test cases > +<TC - 050402_152 verify that literal cannot be used as actual out value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_090 NegSem_050402_actual_parameters_090.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_152 NegSem_050402_actual_parameters_152.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that function calls cannot be used as inout formal template parameters of test cases + ** @purpose 1:5.4.2, verify that literal cannot be used as actual out value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_090 { +module NegSem_050402_actual_parameters_152 { type component GeneralComp { } - - function f_ret() return integer { - return 5; + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } } - - testcase TC_NegSem_050402_actual_parameters_090(inout template integer p_val) runs on GeneralComp { - if (match(5, p_val)) { setverdict(pass); } - else { setverdict(fail); } + + testcase TC_NegSem_050402_actual_parameters_152() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(1); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_090(f_ret())); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_152()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of function `@NegSem_050402_actual_parameters_090.f_ret' +error: Reference to a variable or value parameter was expected for an `out' value parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_091 negative test +:h3. NegSem_050402_actual_parameters_153 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_091 verify that expressions cannot be used as inout formal template parameters of test cases > +<TC - 050402_153 verify that expression cannot be used as actual out value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_091 NegSem_050402_actual_parameters_091.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_153 NegSem_050402_actual_parameters_153.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that expressions cannot be used as inout formal template parameters of test cases + ** @purpose 1:5.4.2, verify that expression cannot be used as actual out value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_091 { +module NegSem_050402_actual_parameters_153 { type component GeneralComp { } - - function f_ret() return integer { - return 4; + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_test(out integer p_val) { + p_val := 9 } - testcase TC_NegSem_050402_actual_parameters_091(inout template integer p_val) runs on GeneralComp { - if (match(9, p_val)) { setverdict(pass); } - else { setverdict(fail); } + testcase TC_NegSem_050402_actual_parameters_153() runs on GeneralComp { + var integer v_val := 5; + timer t_tmr := 0.1; + t_tmr.start; + a_test(10 + f_ret() - v_val); + setverdict(pass); } control { - var integer v_val := 5; - execute(TC_NegSem_050402_actual_parameters_091(10 + f_ret() - v_val)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_153()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter +error: Reference to a variable or value parameter was expected for an `out' value parameter <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_092 negative test +:h3. NegSem_050402_actual_parameters_154 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_092 verify that template parameters cannot be used as inout formal template parameters of test cases > +<TC - 050402_154 verify that function calls cannot be used as actual out value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_092 NegSem_050402_actual_parameters_092.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_154 NegSem_050402_actual_parameters_154.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that template parameters cannot be used as inout formal template parameters of test cases + ** @purpose 1:5.4.2, verify that function calls cannot be used as actual out value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal template parameters shall be variables, -// template variables, formal value or template parameters (of in, inout or out -// parameterization) of the current scope or references to elements of (template) variables -// or formal (template) parameters of structured types. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_092 { +module NegSem_050402_actual_parameters_154 { type component GeneralComp { - } - - template integer m_msg := 1; + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } - testcase TC_NegSem_050402_actual_parameters_092(inout template integer p_val) runs on GeneralComp { - if (match(1, p_val)) { setverdict(pass); } - else { setverdict(fail); } + function f_ret() return integer { + return 4; + } + + testcase TC_NegSem_050402_actual_parameters_154() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(f_ret()); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_092(m_msg)); // tested parameter passing + execute(TC_NegSem_050402_actual_parameters_154()); } } <END_MODULE> <RESULT COUNT 1> - error: Reference to a template variable or template parameter was expected for an `inout' template parameter instead of template `@NegSem_050402_actual_parameters_092.m_msg' +error: Reference to a variable or value parameter was expected for an `out' value parameter instead of function `@NegSem_050402_actual_parameters_154.f_ret' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_093 negative test +:h3. NegSem_050402_actual_parameters_155 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_093 verify that referencing errors are detected in actual parameters passed to in formal value parameters > +<TC - 050402_155 verify that module parameters cannot be used as actual out value parameters of altsteps > <COMPILE> -<EXECUTE_PARALLEL> - -<MODULE TTCN NegSem_050402_actual_parameters_093 NegSem_050402_actual_parameters_093.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_155 NegSem_050402_actual_parameters_155.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that referencing errors are detected in actual parameters passed to in formal value parameters + ** @purpose 1:5.4.2, verify that module parameters cannot be used as actual out value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// When actual parameters that are passed to in formal value or template parameters -// contain a value or template reference, rules for using references on the right hand -// side of assignments apply. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_093 { +module NegSem_050402_actual_parameters_155 { type component GeneralComp { - } - - type record R { - integer field1, - record { - integer subfield1, - integer subfield2 - } field2 optional - } - - function f_test(in integer p_val) { - if (p_val == 2) { setverdict(pass); } - else { setverdict(fail); } } + + modulepar integer PX_VAL := 2; - testcase TC_NegSem_050402_actual_parameters_093() runs on GeneralComp { - var R v_rec := { - field1 := 1, - field2 := omit + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 } - f_test(v_rec.field2.subfield1); // tested parameter passing + } + + testcase TC_NegSem_050402_actual_parameters_155() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(PX_VAL); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_093()); + execute(TC_NegSem_050402_actual_parameters_155()); } } <END_MODULE> <RESULT COUNT 1> -Dynamic test case error: Using the value of an optional field containing omit +error: Reference to a variable or value parameter was expected for an `out' value parameter instead of module parameter `@NegSem_050402_actual_parameters_155.PX_VAL' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_094 negative test +:h3. NegSem_050402_actual_parameters_156 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_094 verify that referencing errors are detected in actual parameters passed to in formal template parameters > +<TC - 050402_156 verify that templates cannot be used as actual out value parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_094 NegSem_050402_actual_parameters_094.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_156 NegSem_050402_actual_parameters_156.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that referencing errors are detected in actual parameters passed to in formal template parameters + ** @purpose 1:5.4.2, verify that templates cannot be used as actual out value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// When actual parameters that are passed to in formal value or template parameters -// contain a value or template reference, rules for using references on the right hand -// side of assignments apply. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_094 { +module NegSem_050402_actual_parameters_156 { type component GeneralComp { - } - - type record R { - integer field1, - record { - integer subfield1, - integer subfield2 - } field2 optional - } - - template R mw_rec := { - field1 := 1, - field2 := * } + + template integer mw_msg := ?; - function f_test(in template integer p_val) { - if (match(255, p_val)) { setverdict(pass); } - else { setverdict(fail); } + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } } - - testcase TC_NegSem_050402_actual_parameters_094() runs on GeneralComp { - f_test(mw_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) + + testcase TC_NegSem_050402_actual_parameters_156() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(mw_msg); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_094()); + execute(TC_NegSem_050402_actual_parameters_156()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to field `subfield1' of any or omit `@NegSem_050402_actual_parameters_094.mw_rec.field2' +error: Reference to a variable or value parameter was expected for an `out' value parameter instead of template `@NegSem_050402_actual_parameters_156.mw_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_095 negative test +:h3. NegSem_050402_actual_parameters_157 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_095 verify that referencing errors are detected in actual parameters passed to in formal template parameters > +<TC - 050402_157 verify that templates cannot be used as actual out value parameters of altsteps > <COMPILE> -<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_050402_actual_parameters_095 NegSem_050402_actual_parameters_095.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_157 NegSem_050402_actual_parameters_157.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that referencing errors are detected in actual parameters passed to out formal template parameters + ** @purpose 1:5.4.2, verify that constants cannot be used as actual out value parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// When actual parameters that are passed to inout and out formal value or template -// parameters contain a value or template reference, rules for using references on -// the left hand side of assignments apply. +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. -module NegSem_050402_actual_parameters_095 { +module NegSem_050402_actual_parameters_157 { type component GeneralComp { - } - - type record R { - integer field1, - record { - integer subfield1, - integer subfield2 - } field2 optional } - function f_test(out template integer p_val) { - p_val := 10; + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } } - - testcase TC_NegSem_050402_actual_parameters_095() runs on GeneralComp { - var template R v_rec := { - field1 := 1, - field2 := ({ subfield1 := 0, subfield2 := 1}, { subfield1 := 2, subfield2 := 3 }) - }; - f_test(v_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) - if (valueof(v_rec.field2.subfield1) == 10 and match(0, v_rec.field2.subfield2)) { setverdict(pass); } - else { setverdict(fail); } - + + testcase TC_NegSem_050402_actual_parameters_157() runs on GeneralComp { + const integer c_val := 3; + timer t_tmr := 0.1; + t_tmr.start; + a_test(c_val); + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_095()); + execute(TC_NegSem_050402_actual_parameters_157()); } } <END_MODULE> <RESULT COUNT 1> -Dynamic test case error: Matching with an uninitialized/unsupported integer template. +error: Reference to a variable or value parameter was expected for an `out' value parameter instead of constant `c_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_096 negative test +:h3. NegSem_050402_actual_parameters_158 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_096 verify that referencing rules are correctly applied to actual parameters of inout formal template parameters > +<TC - 050402_158 verify that function cannot have more actual than formal parameters > <COMPILE> -<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_050402_actual_parameters_096 NegSem_050402_actual_parameters_096.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_158 NegSem_050402_actual_parameters_158.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of inout formal template parameters + ** @purpose 1:5.4.2, verify that function cannot have more actual than formal parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// When actual parameters that are passed to inout and out formal value or template -// parameters contain a value or template reference, rules for using references on -// the left hand side of assignments apply. +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. -module NegSem_050402_actual_parameters_096 { +module NegSem_050402_actual_parameters_158 { type component GeneralComp { - } - - type record R { - integer field1, - record { - integer subfield1, - integer subfield2 - } field2 optional - } + } - function f_test(inout template integer p_val) { - p_val := 10; + function f_test(in integer p_val) { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_096() runs on GeneralComp { - var template R v_rec := { - field1 := 1, - field2 := ({ subfield1 := 0, subfield2 := 1}, { subfield1 := 2, subfield2 := 3 }) - }; - // expected error since v_rec.field2.subfield1 not defined since v_rec.field2 is not *, ? or omit (see expansion rules) - f_test(v_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) - log(v_rec); - if (valueof(v_rec.field2.subfield1) == 10 and match(0, v_rec.field2.subfield2)) { setverdict(pass); } - else { setverdict(fail); } + testcase TC_NegSem_050402_actual_parameters_158() runs on GeneralComp { + f_test(1, 2); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_096()); + execute(TC_NegSem_050402_actual_parameters_158()); } } <END_MODULE> <RESULT COUNT 1> -Dynamic test case error: Matching with an uninitialized/unsupported integer template. +error: Too many parameters: 1 was expected instead of 2 <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_097 negative test +:h3. NegSem_050402_actual_parameters_159 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_097 verify that string item references cannot be used as inout formal value parameters of functions > +<TC - 050402_159 verify that templates cannot have more actual than formal parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_097 NegSem_050402_actual_parameters_097.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_159 NegSem_050402_actual_parameters_159.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that string item references cannot be used as inout formal value parameters of functions + ** @purpose 1:5.4.2, verify that templates cannot have more actual than formal parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to inout formal value parameters shall be variables -// or formal value parameters (of in, inout or out parameterization) or references to -// elements of variables or formal value parameters of structured types. -// (see also the NOTE from 5.4.2) +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. -module NegSem_050402_actual_parameters_097 { +module NegSem_050402_actual_parameters_159 { type component GeneralComp { } - - function f_test(inout charstring p_val) { - if (p_val == "t") { setverdict(pass); } - else { setverdict(fail); } - p_val := "r"; - } - testcase TC_NegSem_050402_actual_parameters_097() runs on GeneralComp { - var charstring v_val := "test"; - f_test(v_val[0]); // tested parameter passing + template integer mw_range (integer p_par) := (0..p_par); + + testcase TC_NegSem_050402_actual_parameters_159() runs on GeneralComp { + log(mw_range(1, 2)); // tested parameter passing + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_097()); + execute(TC_NegSem_050402_actual_parameters_159()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a string element of type `charstring' cannot be used in this context +error: Too many parameters: 1 was expected instead of 2 <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_098 negative test +:h3. NegSem_050402_actual_parameters_160 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_098 verify that ordinary values cannot be passed to timer parameters > +<TC - 050402_160 verify that altstep cannot have more actual than formal parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_098 NegSem_050402_actual_parameters_098.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_160 NegSem_050402_actual_parameters_160.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that ordinary values cannot be passed to timer parameters + ** @purpose 1:5.4.2, verify that altstep cannot have more actual than formal parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to formal timer parameters shall be component -// timers, local timers or formal timer parameters of the current scope. +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. -module NegSem_050402_actual_parameters_098 { +module NegSem_050402_actual_parameters_160 { type component GeneralComp { - } - - function f_test(timer t_par) { - t_par.start; - if (t_par.running) { setverdict(pass); } - else { setverdict(fail); } + } + + altstep a_test(in integer p_val) { + [] any timer.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } } - testcase TC_NegSem_050402_actual_parameters_098() runs on GeneralComp { - f_test(5.0); // tested parameter passing: it should not be possible to pass a float value to a timer parameter + testcase TC_NegSem_050402_actual_parameters_160() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(1, 2); // tested parameter passing } control { - execute(TC_NegSem_050402_actual_parameters_098()); + execute(TC_NegSem_050402_actual_parameters_160()); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a timer or timer parameter was expected for a timer parameter +error: Too many parameters: 1 was expected instead of 2 <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_099 negative test +:h3. NegSem_050402_actual_parameters_161 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_099 verify that values cannot be passed to port parameters > +<TC - 050402_161 verify that testcase cannot have more actual than formal parameters > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_099 NegSem_050402_actual_parameters_099.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_161 NegSem_050402_actual_parameters_161.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that values cannot be passed to port parameters + ** @purpose 1:5.4.2, verify that testcase cannot have more actual than formal parameters ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to formal port parameters shall be component -// ports or formal port parameters of the current scope. +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. -module NegSem_050402_actual_parameters_099 { +module NegSem_050402_actual_parameters_161 { - type port IntPort message { - inout integer; - } - type component GeneralComp { - port IntPort p; } - - function f_test(IntPort p_port) { - p_port.stop; - } - testcase TC_NegSem_050402_actual_parameters_099() runs on GeneralComp { - var integer v_val := 5; - f_test(v_val); // tested parameter passing - setverdict(pass); + testcase TC_NegSem_050402_actual_parameters_161(in integer p_val) runs on GeneralComp { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_099()); + execute(TC_NegSem_050402_actual_parameters_161(1, 2)); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to a port or port parameter was expected for a port parameter instead of variable `v_val' +error: Too many parameters: 1 was expected instead of 2 <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_100 negative test +:h3. NegSem_050402_actual_parameters_165 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_100 verify that list notation containing actual parameters in wrong order is not accepted > +<TC - 050402_165 verify that value variables cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_100 NegSem_050402_actual_parameters_100.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_165 NegSem_050402_actual_parameters_165.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that list notation containing actual parameters in wrong order is not accepted + ** @purpose 1:5.4.2, verify that value variables cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// When using list notation, the order of elements in the actual parameter list shall -// be the same as their order in the corresponding formal parameter list. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_100 { +module NegSem_050402_actual_parameters_165 { type component GeneralComp { } - - function f_test (integer p_val1, charstring p_val2) { - if ( match(p_val1, 1) and match(p_val2, "test")) { setverdict(pass); } - else { setverdict(fail); } + + function f_test(out template integer p_val) { + p_val := 2; } - testcase TC_NegSem_050402_actual_parameters_100() runs on GeneralComp { - f_test("test", 1); + testcase TC_NegSem_050402_actual_parameters_165() runs on GeneralComp { + var integer vm_msg; + f_test(vm_msg); // tested parameter passing + if (match(2, vm_msg)) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_100()); + execute(TC_NegSem_050402_actual_parameters_165()); } } <END_MODULE> <RESULT COUNT 1> -error: integer value was expected -<END_RESULT> -<RESULT COUNT 1> -error: character string value was expected +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of variable `vm_msg' <END_RESULT> + <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_101 negative test +:h3. NegSem_050402_actual_parameters_166 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_101 verify that list notation containing less actual parameters than required is not accepted > +<TC - 050402_166 verify that value in parameters cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_101 NegSem_050402_actual_parameters_101.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_166 NegSem_050402_actual_parameters_166.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that list notation containing less actual parameters than required is not accepted + ** @purpose 1:5.4.2, verify that value in parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// For each formal parameter without a default there shall be an actual parameter. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_101 { +module NegSem_050402_actual_parameters_166 { type component GeneralComp { - } + } + + function f_test(out template integer p_val) { + p_val := 0; + } - function f_test (integer p_val1, charstring p_val2) { - if (p_val1 == 1) { setverdict(pass); } + function f_caller(in integer p_val) { + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_101() runs on GeneralComp { - f_test(1); + + testcase TC_NegSem_050402_actual_parameters_166() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_101()); + execute(TC_NegSem_050402_actual_parameters_166()); } } <END_MODULE> <RESULT COUNT 1> -error: Too few parameters: 2 was expected instead of 1 +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_102 negative test +:h3. NegSem_050402_actual_parameters_167 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_102 verify that parameter without default value cannot be skipped > +<TC - 050402_167 verify that value in parameters cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_102 NegSem_050402_actual_parameters_102.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_167 NegSem_050402_actual_parameters_167.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that parameter without default value cannot be skipped + ** @purpose 1:5.4.2, verify that value out parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// For each formal parameter without a default there shall be an actual parameter. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_102 { +module NegSem_050402_actual_parameters_167 { type component GeneralComp { - } + } + + function f_test(out template integer p_val) { + p_val := 0; + } - function f_test (integer p_val1, charstring p_val2) { - if (p_val1 == 1) { setverdict(pass); } + function f_caller(out integer p_val) { + p_val := 4; // out parameter shall have a value before we can pass it to a function + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_102() runs on GeneralComp { - f_test(1, -); + + testcase TC_NegSem_050402_actual_parameters_167() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_102()); + execute(TC_NegSem_050402_actual_parameters_167()); } } <END_MODULE> <RESULT COUNT 1> -error: Not used symbol \(`-'\) cannot be used for parameter that does not have default value +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of `out' value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_103 negative test +:h3. NegSem_050402_actual_parameters_168 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_103 verify that mixing list and assignment notation is not allowed in parameterized calls (value as actual parameter) > +<TC - 050402_168 verify that value inout parameters cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_103 NegSem_050402_actual_parameters_103.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_168 NegSem_050402_actual_parameters_168.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that mixing list and assignment notation is not allowed in parameterized calls (value as actual parameter) + ** @purpose 1:5.4.2, verify that value inout parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Either list notation or assignment notation shall be used in a single parameter -// list. They shall not be mixed. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_103 { +module NegSem_050402_actual_parameters_168 { type component GeneralComp { - } + } + + function f_test(out template integer p_val) { + p_val := 0; + } - function f_test (integer p_val1, charstring p_val2) { - if ( match(p_val1, 1) and match(p_val2, "test")) { setverdict(pass); } + function f_caller(inout integer p_val) { + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_103() runs on GeneralComp { - f_test(p_val1 := 1, "test"); + + testcase TC_NegSem_050402_actual_parameters_168() runs on GeneralComp { + var integer v_val := 5; + f_caller(v_val); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_103()); + execute(TC_NegSem_050402_actual_parameters_168()); } } <END_MODULE> <RESULT COUNT 1> -error: at or before token `"': syntax error, unexpected Cstring +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of `inout' value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_104 negative test +:h3. NegSem_050402_actual_parameters_169 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_104 verify that mixing list and assignment notation is not allowed in parameterized calls (skipped actual parameter) > +<TC - 050402_169 verify that value variable element reference cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_104 NegSem_050402_actual_parameters_104.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_169 NegSem_050402_actual_parameters_169.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that mixing list and assignment notation is not allowed in parameterized calls (skipped actual parameter) + ** @purpose 1:5.4.2, verify that value variable element reference cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Either list notation or assignment notation shall be used in a single parameter -// list. They shall not be mixed. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_104 { +module NegSem_050402_actual_parameters_169 { type component GeneralComp { - } - - function f_test (integer p_val1, charstring p_val2 := "test") { - if ( match(p_val1, 1) and match(p_val2, "test")) { setverdict(pass); } - else { setverdict(fail); } + } + + type record R { + integer field1 + } + + function f_test(out template integer p_val) { + p_val := ?; } - testcase TC_NegSem_050402_actual_parameters_104() runs on GeneralComp { - f_test(p_val1 := 1, -); + testcase TC_NegSem_050402_actual_parameters_169() runs on GeneralComp { + var R v_val := { field1 := 10 }; + f_test(v_val.field1); // tested parameter passing + if (match( { field1 := 0 }, v_val)) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_104()); + execute(TC_NegSem_050402_actual_parameters_169()); } } <END_MODULE> <RESULT COUNT 1> -error: at or before token `-': syntax error, unexpected '-' +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of variable `v_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_105 negative test +:h3. NegSem_050402_actual_parameters_170 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_105 verify that parameters cannot be assigned more than once in assignment notation > +<TC - 050402_170 verify that reference to elements of formal value parameters cannot be used as out formal template parameters of functions > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_105 NegSem_050402_actual_parameters_105.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_170 NegSem_050402_actual_parameters_170.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that parameters cannot be assigned more than once in assignment notation + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// When using assignment notation, each formal parameter shall be assigned an actual -// parameter at most once. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_105 { +module NegSem_050402_actual_parameters_170 { type component GeneralComp { - } - - function f_test (integer p_val1, charstring p_val2) { - if (match(p_val1 == 1 and p_val2 == "test") { setverdict(pass); } + } + + type record R { + integer field1 + } + + function f_test(out template integer p_val) { + p_val := ?; + } + + function f_caller(in R p_param) { + f_test(p_param.field1); // tested parameter passing + if (match( { field1 := 0 }, p_param)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_105() runs on GeneralComp { - f_test(p_val1 := 1, p_val2 := "test", p_val1 := 1); + testcase TC_NegSem_050402_actual_parameters_170() runs on GeneralComp { + f_caller({field1 := 11 }); } control { - execute(TC_NegSem_050402_actual_parameters_105()); + execute(TC_NegSem_050402_actual_parameters_170()); } } <END_MODULE> <RESULT COUNT 1> -error: at or before token `\)': syntax error, unexpected '\)' +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of value parameter `p_param' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_106 negative test +:h3. NegSem_050402_actual_parameters_171 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_106 verify that assignment notation that doesn't contain all parameters is not accepted > +<TC - 050402_171 verify that value variables cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_106 NegSem_050402_actual_parameters_106.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_171 NegSem_050402_actual_parameters_171.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that assignment notation that doesn't contain all parameters is not accepted + ** @purpose 1:5.4.2, verify that value variables cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// For each formal parameter without default value, there shall be an actual parameter. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_106 { +module NegSem_050402_actual_parameters_171 { type component GeneralComp { + timer t := 0.0; } - - function f_test (integer p_val1, charstring p_val2, integer p_val3) { - if (match(p_val1, 1) and match(p_val2, "test") and match(p_val3, 3)) { setverdict(pass); } - else { setverdict(fail); } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } } - testcase TC_NegSem_050402_actual_parameters_106() runs on GeneralComp { - f_test(p_val2 := "test", p_val3 := 3); + testcase TC_NegSem_050402_actual_parameters_171() runs on GeneralComp { + var integer vm_msg := 2; + t.start; + a_test(vm_msg); // tested parameter passing + if (match(0, vm_msg)) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_106()); + execute(TC_NegSem_050402_actual_parameters_171()); } } <END_MODULE> <RESULT COUNT 1> -error: Parameter not specified +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of variable `vm_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_107 negative test +:h3. NegSem_050402_actual_parameters_172 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_107 verify that incompatible values cannot be passed to in formal parameters > +<TC - 050402_172 verify that value in parameters cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_107 NegSem_050402_actual_parameters_107.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_172 NegSem_050402_actual_parameters_172.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that incompatible values cannot be passed to in formal parameters + ** @purpose 1:5.4.2, verify that value in parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// The type of each actual parameter shall be compatible with the type of each -// corresponding formal parameter. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_107 { +module NegSem_050402_actual_parameters_172 { type component GeneralComp { - } - - type record R1 { - integer field1, - integer field2 + timer t := 0.0; } - type record R2 { - integer elem1, - integer elem2 optional + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } } - function f_test (R1 p_val) { - if (p_val == { field1 := 1, field2 := 2 }) { setverdict(pass); } + function f_caller(in integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_107() runs on GeneralComp { - var R2 v_rec := { 1, 2 }; - f_test(v_rec); + + testcase TC_NegSem_050402_actual_parameters_172() runs on GeneralComp { + t.start; + f_caller(3); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_107()); + execute(TC_NegSem_050402_actual_parameters_172()); } } <END_MODULE> <RESULT COUNT 1> -error: Type mismatch: `@NegSem_050402_actual_parameters_107.R1.field2' of type `integer' and `@NegSem_050402_actual_parameters_107.R2.elem2' of type `integer' are not compatible: The optionality of fields in record/SEQUENCE types must be the same +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_108 negative test +:h3. NegSem_050402_actual_parameters_173 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_108 verify that incompatible values cannot be passed from out formal parameters > +<TC - 050402_173 verify that value out parameters cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_108 NegSem_050402_actual_parameters_108.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_173 NegSem_050402_actual_parameters_173.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that incompatible values cannot be passed from out formal parameters + ** @purpose 1:5.4.2, verify that value out parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// The type of each actual parameter shall be compatible with the type of each -// corresponding formal parameter. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_108 { +module NegSem_050402_actual_parameters_173 { type component GeneralComp { - } - - type record R1 { - integer field1, - integer field2 optional + timer t := 0.0; } - type record R2 { - integer elem1, - integer elem2 + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } } - function f_test (out R1 p_val) { - p_val.field1 := 1; - p_val.field2 := 2; + function f_caller(out integer p_val) runs on GeneralComp { + p_val := 4; // out parameter shall have a value before we can pass it to a function + a_test(p_val); // tested parameter passing + if (match(0 , p_val)) { setverdict(pass); } + else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_108() runs on GeneralComp { - var R2 v_rec; - f_test(v_rec); - if (v_rec == { elem1 := 1, elem2 := 2 }) { setverdict(pass); } - else { setverdict(fail); } + + testcase TC_NegSem_050402_actual_parameters_173() runs on GeneralComp { + var integer v_val; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_108()); + execute(TC_NegSem_050402_actual_parameters_173()); } } <END_MODULE> <RESULT COUNT 1> -error: Type mismatch: `@NegSem_050402_actual_parameters_108.R1.field2' of type `integer' and `@NegSem_050402_actual_parameters_108.R2.elem2' of type `integer' are not compatible: The optionality of fields in record/SEQUENCE types must be the same +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of `out' value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_109 negative test +:h3. NegSem_050402_actual_parameters_174 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_109 verify that incompatible values cannot be passed to inout formal parameters > +<TC - 050402_174 verify that value inout parameters cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_109 NegSem_050402_actual_parameters_109.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_174 NegSem_050402_actual_parameters_174.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that incompatible values cannot be passed to inout formal parameters + ** @purpose 1:5.4.2, verify that value inout parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Strong typing is required for parameters passed by reference. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_109 { +module NegSem_050402_actual_parameters_174 { type component GeneralComp { - } - - type record R1 { - integer field1, - integer field2 optional + timer t := 0.0; } - type record R2 { - integer elem1, - integer elem2 + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } } - function f_test (inout R1 p_val) { - if (p_val == { field1 := 1, field2 := 2 }) { setverdict(pass); } + function f_caller(inout integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_109() runs on GeneralComp { - var R2 v_rec := { 1, 2 }; - f_test(v_rec); + + testcase TC_NegSem_050402_actual_parameters_174() runs on GeneralComp { + var integer v_val := 5; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test } control { - execute(TC_NegSem_050402_actual_parameters_109()); + execute(TC_NegSem_050402_actual_parameters_174()); } } <END_MODULE> <RESULT COUNT 1> -error: Type mismatch: `@NegSem_050402_actual_parameters_109.R1.field2' of type `integer' and `@NegSem_050402_actual_parameters_109.R2.elem2' of type `integer' are not compatible: The optionality of fields in record/SEQUENCE types must be the same +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of `inout' value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_111 negative test +:h3. NegSem_050402_actual_parameters_175 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_111 verify that incompatible templates cannot be passed to template parameters with omit restriction > +<TC - 050402_175 verify that value variable element reference cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_111 NegSem_050402_actual_parameters_111.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_175 NegSem_050402_actual_parameters_175.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that incompatible templates cannot be passed to template parameters with omit restriction + ** @purpose 1:5.4.2, verify that value variable element reference cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters passed to restricted formal template parameters shall obey -// the restrictions given in clause 15.8. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_111 { +module NegSem_050402_actual_parameters_175 { type component GeneralComp { - } - - function f_test (omit integer p_val) { - if (match(1, p_val)) { setverdict(pass); } - else { setverdict(fail); } + timer t := 0.0; + } + + type record R { + integer field1 + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 5; + } } - testcase TC_NegSem_050402_actual_parameters_111() runs on GeneralComp { - f_test((0..10)); + testcase TC_NegSem_050402_actual_parameters_175() runs on GeneralComp { + var R v_val := { field1 := 10 }; + t.start; + a_test(v_val.field1); // tested parameter passing + if (match({ field1 := 5 }, v_val)) { setverdict(pass); } + else { setverdict(fail); } } control { - execute(TC_NegSem_050402_actual_parameters_111()); + execute(TC_NegSem_050402_actual_parameters_175()); } } <END_MODULE> <RESULT COUNT 1> -error: Restriction on template formal parameter does not allow usage of value range match +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of variable `v_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_112 negative test +:h3. NegSem_050402_actual_parameters_176 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_112 verify that compatible templates can be passed to template parameters with value restriction > +<TC - 050402_176 verify that reference to elements of formal value parameters cannot be used as out formal template parameters of altsteps > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_112 NegSem_050402_actual_parameters_112.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_176 NegSem_050402_actual_parameters_176.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that compatible templates can be passed to template parameters with value restriction + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters passed to restricted formal template parameters shall obey -// the restrictions given in clause 15.8. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_112 { +module NegSem_050402_actual_parameters_176 { type component GeneralComp { - } - - function f_test (template(value) integer p_val) { - if (match(1, p_val)) { setverdict(pass); } + timer t := 0.0; + } + + type record R { + integer field1 + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 5; + } + } + + function f_caller(in R p_param) runs on GeneralComp { + a_test(p_param.field1); // tested parameter passing + if (match({ field1 := 5 }, p_param)) { setverdict(pass); } else { setverdict(fail); } } - testcase TC_NegSem_050402_actual_parameters_112() runs on GeneralComp { - f_test((1, 2, 3)); + testcase TC_NegSem_050402_actual_parameters_176() runs on GeneralComp { + t.start; + f_caller({field1 := 11 }); } control { - execute(TC_NegSem_050402_actual_parameters_112()); + execute(TC_NegSem_050402_actual_parameters_176()); } } <END_MODULE> <RESULT COUNT 1> -error: Restriction on template formal parameter does not allow usage of value list match +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of value parameter `p_param' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_113 negative test +:h3. NegSem_050402_actual_parameters_177 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_113 verify that compatible templates can be passed to template parameters with present restriction > +<TC - 050402_177 verify that value variables cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_113 NegSem_050402_actual_parameters_113.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_177 NegSem_050402_actual_parameters_177.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that compatible templates can be passed to template parameters with present restriction + ** @purpose 1:5.4.2, verify that value variables cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters passed to restricted formal template parameters shall obey -// the restrictions given in clause 15.8. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_113 { +module NegSem_050402_actual_parameters_177 { type component GeneralComp { } - - function f_test (template(present) integer p_val) { - if (match(1, p_val)) { setverdict(pass); } - else { setverdict(fail); } - } - - testcase TC_NegSem_050402_actual_parameters_113() runs on GeneralComp { - f_test(*); + + testcase TC_NegSem_050402_actual_parameters_177(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_113()); + var integer vm_msg := 2; + execute(TC_NegSem_050402_actual_parameters_177(vm_msg)); // tested parameter passing } } <END_MODULE> <RESULT COUNT 1> -error: Restriction on template formal parameter does not allow usage of any or omit +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of variable `vm_msg' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_114 negative test +:h3. NegSem_050402_actual_parameters_178 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_114 verify that compatible templates can be passed to template parameters with present restriction > +<TC - 050402_178 verify that value in parameters cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_114 NegSem_050402_actual_parameters_114.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_178 NegSem_050402_actual_parameters_178.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that parametrized entities used as actual parameter cannot be passed without parameter list + ** @purpose 1:5.4.2, verify that value in parameters cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// All parameterized entities specified as an actual parameter shall have their -// own parameters resolved in the top-level actual parameter list. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_114 { +module NegSem_050402_actual_parameters_178 { type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_178(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } - type record R { - integer field1, - integer field2 optional - } - - template R mw_rec(template integer p_field2) := { - field1 := 1, - field2 := p_field2 + function f_caller(in integer p_val) { + execute(TC_NegSem_050402_actual_parameters_178(p_val)); // tested parameter passing } - function f_test (template R p_match) { - if (match({1, omit}, p_match)) { setverdict(pass); } - else { setverdict(fail); } - } - - testcase TC_NegSem_050402_actual_parameters_114() runs on GeneralComp { - f_test(mw_rec); - } - control { - execute(TC_NegSem_050402_actual_parameters_114()); + f_caller(3); // this parameter passing is not a subject of the test } } <END_MODULE> <RESULT COUNT 1> -error: Reference to parameterized definition `mw_rec' without actual parameter list +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_115 negative test +:h3. NegSem_050402_actual_parameters_179 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_115 verify that error is generated when no actual parameter list is used for functions with no parameters > +<TC - 050402_179 verify that value out parameters cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_115 NegSem_050402_actual_parameters_115.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_179 NegSem_050402_actual_parameters_179.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that error is generated when no actual parameter list is used for functions with no parameters + ** @purpose 1:5.4.2, verify that value out parameters cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// If the formal parameter list of TTCN-3 objects function, testcase, signature, -// altstep or external function is empty, then the empty parentheses shall be -// included both in the declaration and in the invocation of that object. In all -// other cases the empty parentheses shall be omitted. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_115 { +module NegSem_050402_actual_parameters_179 { type component GeneralComp { - } - - function f_test () return integer { - setverdict(pass); - return 1; } - - testcase TC_NegSem_050402_actual_parameters_115() runs on GeneralComp { - log(f_test); + + testcase TC_NegSem_050402_actual_parameters_179(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } + + function f_caller(out integer p_val) { + execute(TC_NegSem_050402_actual_parameters_179(p_val)); // tested parameter passing + } control { - execute(TC_NegSem_050402_actual_parameters_115()); + var integer vm_val; + f_caller(vm_val); } } <END_MODULE> <RESULT COUNT 1> -error: Reference to parameterized definition `f_test' without actual parameter list +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of `out' value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_116 negative test +:h3. NegSem_050402_actual_parameters_180 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_116 verify that error is generated when no actual parameter list is used for test cases with no parameters > +<TC - 050402_180 verify that value inout parameters cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_116 NegSem_050402_actual_parameters_116.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_180 NegSem_050402_actual_parameters_180.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that error is generated when no actual parameter list is used for test cases with no parameters + ** @purpose 1:5.4.2, verify that value inout parameters cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// If the formal parameter list of TTCN-3 objects function, testcase, signature, -// altstep or external function is empty, then the empty parentheses shall be -// included both in the declaration and in the invocation of that object. In all -// other cases the empty parentheses shall be omitted. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_116 { +module NegSem_050402_actual_parameters_180 { type component GeneralComp { - } - - testcase TC_NegSem_050402_actual_parameters_116() runs on GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_180(out template integer p_val) runs on GeneralComp { + p_val := ?; setverdict(pass); } + function f_caller(inout integer p_val) { + execute(TC_NegSem_050402_actual_parameters_180(p_val)); // tested parameter passing + } + control { - execute(TC_NegSem_050402_actual_parameters_116); + var integer vm_val := 5; + f_caller(vm_val); } } <END_MODULE> <RESULT COUNT 1> -error: at or before token `\)': syntax error, unexpected '\)', expecting '\(' +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of `inout' value parameter `p_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_117 negative test +:h3. NegSem_050402_actual_parameters_181 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_117 verify that error is generated when no actual parameter list is used for altsteps with no parameters > +<TC - 050402_181 verify that variable element reference cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_117 NegSem_050402_actual_parameters_117.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_181 NegSem_050402_actual_parameters_181.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that error is generated when no actual parameter list is used for altsteps with no parameters + ** @purpose 1:5.4.2, verify that variable element reference cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// If the formal parameter list of TTCN-3 objects function, testcase, signature, -// altstep or external function is empty, then the empty parentheses shall be -// included both in the declaration and in the invocation of that object. In all -// other cases the empty parentheses shall be omitted. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_117 { +module NegSem_050402_actual_parameters_181 { type component GeneralComp { - } - - altstep a_test () { - [] any timer.timeout { setverdict(pass); } + } + + type record R { + integer field1 } - testcase TC_NegSem_050402_actual_parameters_117() runs on GeneralComp { - timer t_instant := 0.0; - t_instant.start; - alt { - [] a_test { - setverdict(pass); - } - } + testcase TC_NegSem_050402_actual_parameters_181(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } control { - execute(TC_NegSem_050402_actual_parameters_117()); + var R v_val := { field1 := 10 }; + execute(TC_NegSem_050402_actual_parameters_181(v_val.field1)); // tested parameter passing } } <END_MODULE> - -<RESULT COUNT 1> -error: at or before token `\{': syntax error, unexpected '\{' -<END_RESULT> <RESULT COUNT 1> -error: at or before token `control': syntax error, unexpected ControlKeyword, expecting \$end +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of variable `v_val' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_050402_actual_parameters_118 negative test +:h3. NegSem_050402_actual_parameters_182 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 050402_118 verify that error is generated when empty actual parameter list is used for templates with no parameters > +<TC - 050402_182 verify that reference to elements of formal value parameters cannot be used as out formal template parameters of test cases > <COMPILE> -<MODULE TTCN NegSem_050402_actual_parameters_118 NegSem_050402_actual_parameters_118.ttcn > +<MODULE TTCN NegSem_050402_actual_parameters_182 NegSem_050402_actual_parameters_182.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:5.4.2, verify that error is generated when empty actual parameter list is used for templates with no parameters + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// If the formal parameter list of TTCN-3 objects function, testcase, signature, -// altstep or external function is empty, then the empty parentheses shall be -// included both in the declaration and in the invocation of that object. In all -// other cases the empty parentheses shall be omitted. +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. -module NegSem_050402_actual_parameters_118 { +module NegSem_050402_actual_parameters_182 { type component GeneralComp { - } - - template integer mw_allInt := ?; + } + + type record R { + integer field1 + } - testcase TC_NegSem_050402_actual_parameters_118() runs on GeneralComp { - if (match(1, mw_allInt())) { setverdict(pass); } - else { setverdict(fail); } + testcase TC_NegSem_050402_actual_parameters_182(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); } + + function f_caller(in R p_param) { + execute(TC_NegSem_050402_actual_parameters_182(p_param.field1)); // tested parameter passing + } control { - execute(TC_NegSem_050402_actual_parameters_118()); + var R mw_t := { field1 := 1 }; + f_caller(mw_t); } } <END_MODULE> - <RESULT COUNT 1> -error: The referenced template `@NegSem_050402_actual_parameters_118.mw_allInt' cannot have actual parameters +error: Reference to a template variable or template parameter was expected for an `out' template parameter instead of value parameter `p_param' <END_RESULT> <END_TC> diff --git a/conformance_test/core_language_tests/negative_tests/06_types_and_values.script b/conformance_test/core_language_tests/negative_tests/06_types_and_values.script index c6e38350c..91cddd8d3 100644 --- a/conformance_test/core_language_tests/negative_tests/06_types_and_values.script +++ b/conformance_test/core_language_tests/negative_tests/06_types_and_values.script @@ -491,6 +491,309 @@ error: Invalid character `H' \(0x48\) in binary string <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_06010101_AccessStringElements_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06010101_001 Accessing not individual elements of a bitstring > + +<COMPILE> + +<MODULE TTCN NegSem_06010101_AccessStringElements_001 NegSem_06010101_AccessStringElements_001.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Accessing not individual elements of a bitstring + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * Only single elements of the string may be accessed. + * Trying to assign strings with length 0 or more than 1 + * to a string element using the array-like syntax shall + * cause an error. +*/ + +module NegSem_06010101_AccessStringElements_001 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_001() runs on GeneralComp { + var bitstring v_b := '100010'B; + v_b[1] := '11'B; //error: only individual elements can be accessed + if (v_b == '100001'B){ + setverdict(pass); + } + else { + setverdict(fail, "v_b:",v_b); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_001()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: The length of the string to be assigned to a string element of type `bitstring' should be 1 instead of 2 +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_06010101_AccessStringElements_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06010101_002 Access bitstring element out of range > + +<COMPILE> +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_06010101_AccessStringElements_002 NegSem_06010101_AccessStringElements_002.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access bitstring element out of range + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_002 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_002() runs on GeneralComp { + var bitstring v_b := '100010'B; + v_b[7] := '0'B; //error: index outside of range + if (v_b == '100001'B){ + setverdict(pass); + } + else { + setverdict(fail, "v_b:",v_b); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_002()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +Dynamic test case error: Index overflow when accessing a bitstring element: The index is 7, but the string has only 6 bits. +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_06010101_AccessStringElements_003 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06010101_003 Accessing not individual elements of a hexstring > + +<COMPILE> + +<MODULE TTCN NegSem_06010101_AccessStringElements_003 NegSem_06010101_AccessStringElements_003.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Accessing not individual elements of a hexstring + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_003 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_003() runs on GeneralComp { + var hexstring v_h := '100010'H; + v_h[1] := '01'H; //error: only individual elements can be accessed + if (v_h == '100001'H){ + setverdict(pass); + } + else { + setverdict(fail, "v_h:",v_h); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_003()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: The length of the string to be assigned to a string element of type `hexstring' should be 1 instead of 2 +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_06010101_AccessStringElements_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06010101_004 Access hexstring element out of range > + +<COMPILE> +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_06010101_AccessStringElements_004 NegSem_06010101_AccessStringElements_004.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access hexstring element out of range + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_004 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_004() runs on GeneralComp { + var hexstring v_h := '100010'H; + v_h[7] := '0'H; //error: index outside of range + if (v_h == '100001'H){ + setverdict(pass); + } + else { + setverdict(fail, "v_h:",v_h); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_004()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +Dynamic test case error: Index overflow when accessing a hexstring element: The index is 7, but the string has only 6 hexadecimal digits. +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_06010101_AccessStringElements_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06010101_005 Accessing not individual elements of an octetstring > + +<COMPILE> + +<MODULE TTCN NegSem_06010101_AccessStringElements_005 NegSem_06010101_AccessStringElements_005.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Accessing not individual elements of an octetstring + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_005 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_005() runs on GeneralComp { + var octetstring v_o := '100010'O; + v_o[1] := '0120'O; //error: only individual elements can be accessed + if (v_o == '100001'O){ + setverdict(pass); + } + else { + setverdict(fail, "v_o:",v_o); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_005()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: The length of the string to be assigned to a string element of type `octetstring' should be 1 instead of 2 +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_06010101_AccessStringElements_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06010101_006 Accessing not individual elements of an octetstring > + +<COMPILE> +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_06010101_AccessStringElements_006 NegSem_06010101_AccessStringElements_006.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access hexstring element out of range + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_006 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_006() runs on GeneralComp { + var octetstring v_o := '100010'O; + v_o[4] := '01'O; //error: only individual elements can be accessed + if (v_o == '100001'O){ + setverdict(pass); + } + else { + setverdict(fail, "v_o:",v_o); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_006()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +Dynamic test case error: Index overflow when accessing a octetstring element: The index is 4, but the string has only 3 octets. +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_06010201_ListOfValues_001 negative test .*---------------------------------------------------------------------* @@ -2835,6 +3138,216 @@ error: at or before token `"': syntax error, unexpected Cstring <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSyn_0602_TopLevel_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 0602_004 Combined value list and assignment notation not allowed in the same (immediate) context. > + +<COMPILE> + +<MODULE TTCN NegSyn_0602_TopLevel_004 NegSyn_0602_TopLevel_004.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + *The assignment notation can be used for record, record of, set, setof and union value + * notations and for arrays. In this notation each field shall not appear more than once. +*/ + +module NegSyn_0602_TopLevel_004 { + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + const MyRecord c_rec := { + field1 := 5, + field1 := 6, // error: already appeared field + field3 := 3.14 + }; +} +<END_MODULE> + +<RESULT COUNT 1> +error: Duplicate record field `field1' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_0602_TopLevel_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 0602_005 Combined value list and assignment notation not allowed in the same (immediate) context. > + +<COMPILE> + +<MODULE TTCN NegSyn_0602_TopLevel_005 NegSyn_0602_TopLevel_005.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index notation can be used for record of and setof value notations and for arrays. + * In this notation each index shall not appear more than once and shall conform to the range of indices allowed by the type definition. +*/ + +module NegSyn_0602_TopLevel_005 { + + type set of integer MySetOfType; + type component GeneralComp { + } + +testcase TC_NegSyn_0602_TopLevel_005() runs on GeneralComp { + + var MySetOfType v_set := { + [0] := 1, + [1] := 2, + [1] := 3 // error already indexed + }; + + if ( match(v_set, {1,3})) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_NegSyn_0602_TopLevel_005()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Duplicate index value `1' for components `3' and `2' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_0602_TopLevel_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 0602_006 Combined value list and assignment notation not allowed in the same (immediate) context. > + +<COMPILE> + +<MODULE TTCN NegSyn_0602_TopLevel_006 NegSyn_0602_TopLevel_006.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The assignment notation can be used for record, record of, set, setof and union value + * notations and for arrays. In this notation each field shall not appear more than once. +*/ + +module NegSyn_0602_TopLevel_006 { + + type set MySetType{ + integer field1, + charstring field2 + } + + type component GeneralComp { + } + + testcase TC_NegSyn_0602_TopLevel_006() runs on GeneralComp { + + var MySetType v_set := { + field1 := 5, + field1 := 6, // error: already appeared field + field2 := "abc" + }; + + if ( match(v_set, {5,"abc"})) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_NegSyn_0602_TopLevel_006()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Duplicate set field `field1' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_0602_TopLevel_007 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 0602_007 Combined value list and assignment notation not allowed in the same (immediate) context. > + +<COMPILE> + +<MODULE TTCN NegSyn_0602_TopLevel_007 NegSyn_0602_TopLevel_007.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The assignment notation can be used for record, record of, set, setof and union value + * notations and for arrays. In this notation each field shall not appear more than once. +*/ + +module NegSyn_0602_TopLevel_007 { + + type record of integer MyRecordOfType; + type component GeneralComp { + } + +testcase TC_NegSyn_0602_TopLevel_007() runs on GeneralComp { + + var MyRecordOfType v_RoI := { + [0] := 1, + [1] := 2, + [1] := 3 // error already indexed + }; + + if ( match(v_RoI, {1,3})) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_NegSyn_0602_TopLevel_007()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Duplicate index value `1' for components `3' and `2' +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSyn_060201_RecordTypeValues_001 negative test .*---------------------------------------------------------------------* @@ -4585,6 +5098,91 @@ error: Cannot determine the type of the operands in operation `!=' <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_060204_enumerated_type_and_values_012 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 060204_012 using enumerated value number integer conversion > + +<COMPILE> + +<MODULE TTCN NegSem_060204_enumerated_type_and_values_012 NegSem_060204_enumerated_type_and_values_012.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2.4, using enumerated value number integer conversion + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// enumerated values with a specific integer value assigned shall not use the associated integer + +module NegSem_060204_enumerated_type_and_values_012 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday(-1), Tuesday(1), Wednesday(2), Thursday(3), Friday(5) + }; + + testcase TC_NegSem_060204_enumerated_type_and_values_012() runs on GeneralComp { + var EDays v_enum := Friday(5); // error: shall not use the associated integer + + if (match(enum2int(v_enum),5)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_012()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: There is no local or imported definition with name `Friday' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_060204_enumerated_type_and_values_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 060204_001 expression as user-assigned enumerated value > + +<COMPILE> + +<MODULE TTCN NegSyn_060204_enumerated_type_and_values_001 NegSyn_060204_enumerated_type_and_values_001.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2.4, expression as user-assigned enumerated value + ** @verdict pass reject, noexecutino + ***************************************************/ + +// The following requirement is tested: +// ach enumerated value may optionally have a user-assigned integer value or non-empty list of integer literal values or ranges of integer literal values + +module NegSyn_060204_enumerated_type_and_values_001 { + + type enumerated MyFirstEnumType { + Monday, Tuesday(), Thursday, Friday + }; // error: non-empty integer literal required +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `\)': syntax error, unexpected '\)' +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_060205_top_level_001 negative test .*---------------------------------------------------------------------* @@ -6927,6 +7525,39 @@ error: A value or expression of type integer was expected <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSyn_060207_arrays_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 060207_005 Ensure that arrays upper value shall not be lesser than the corresponding lower value > + +<COMPILE> + +<MODULE TTCN NegSyn_060207_arrays_005 NegSyn_060207_arrays_005.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2.7, Ensure that arrays upper value shall not be lesser than the corresponding lower value + ** @verdict pass reject + ***************************************************/ +/*The following requirement is tested: + * The upper value shall not be lesser than the corresponding lower value. + */ +module NegSyn_060207_arrays_005 { + + control { + var integer v_arr[5..1]; // error: . The upper value shall not be lesser than the corresponding lower value + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: The lower bound of array index \(5\) is greater than the upper bound \(1\) +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_060209_CommunicationPortTypes_004 negative test .*---------------------------------------------------------------------* @@ -7335,6 +7966,76 @@ error: at or before token `!': syntax error, unexpected '!' <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_06021301_LengthSubtyping_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06021301_005 The length subtyping check for 'record of' or 'set of' types > + +<COMPILE> + +<MODULE TTCN NegSem_06021301_LengthSubtyping_005 NegSem_06021301_LengthSubtyping_005.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ +/*The following requirement is tested: + * In case of the range syntax the upper bound shall not be lesser than the lower bound value. + */ +module NegSem_06021301_LengthSubtyping_005 { + type set length(0..10) of integer SetOfLengthLessThan10; + + type SetOfLengthLessThan10 SetOfLength5 length(5..2); + //Error: In case of the range syntax the upper bound shall not be lesser than the lower bound value. + +} +<END_MODULE> + +<RESULT COUNT 1> +error: The upper boundary of the length restriction \(2\) cannot be smaller than the lower boundary \(5\) +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_06021301_LengthSubtyping_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 06021301_006 The length subtyping check for 'record of' or 'set of' types > + +<COMPILE> + +<MODULE TTCN NegSem_06021301_LengthSubtyping_006 NegSem_06021301_LengthSubtyping_006.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ + +/*The following requirement is tested: + * In case of the range syntax the upper bound shall not be lesser than the lower bound value. +*/ + +module NegSem_06021301_LengthSubtyping_006 { + type record length(0..10) of integer RecordOfLengthLessThan10; + + type RecordOfLengthLessThan10 RecordOfLengthLessThan5 length(5..2); + //Error: In case of the range syntax the upper bound shall not be lesser than the lower bound value. + +} +<END_MODULE> + +<RESULT COUNT 1> +error: The upper boundary of the length restriction \(2\) cannot be smaller than the lower boundary \(5\) +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_06021302_ListSubtyping_001 negative test .*---------------------------------------------------------------------* @@ -7688,7 +8389,7 @@ error: Type mismatch: `@NegSem_060302_structured_types_004.SetType.b' of type `i ** @verdict pass reject ***************************************************/ -module NegSem_060302_structured_types_009 { +module NegSem_060302_structured_types_009 language "TTCN-3:2016"{ type enumerated EnumeratedType {e_black, e_white}; type enumerated EnumeratedRedefinition {e_black, e_white}; diff --git a/conformance_test/core_language_tests/negative_tests/07-14_folder.script b/conformance_test/core_language_tests/negative_tests/07-14_folder.script index 4d5b5499d..111fcba61 100644 --- a/conformance_test/core_language_tests/negative_tests/07-14_folder.script +++ b/conformance_test/core_language_tests/negative_tests/07-14_folder.script @@ -746,6 +746,287 @@ error: Right operand of operation `&' should be a string, `record of' or `set of :h2. 08_modules folder .*---------------------------------------------------------------------* +*---------------------------------------------------------------------* +:h3. NegSem_080201_ModuleParameters_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 080201_001 Ensure that a port, default or component types cannot be module parameters. > + +<COMPILE> + +<MODULE TTCN NegSem_080201_ModuleParameters_001 NegSem_080201_ModuleParameters_001.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a port, default or component types cannot be module parameters. + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +/* Restriction B: Module parameters shall not be of port type, + * default type or component type and shall not be of a structured type that contains a sub-element of + * port type at any level of nesting.*/ + +module NegSem_080201_ModuleParameters_001 { + + type port MyMessagePortType message { + inout integer + } with {extension "internal"} + + modulepar MyMessagePortType MY_PORT; // not allowed + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_001() runs on GeneralComp { + if (MY_PORT.checkstate("Started")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_001()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Type of module parameter cannot be or embed port type `@NegSem_080201_ModuleParameters_001.MyMessagePortType' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_080201_ModuleParameters_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 080201_004 Ensure that module parameters remain constant. > + +<COMPILE> + +<MODULE TTCN NegSem_080201_ModuleParameters_004 NegSem_080201_ModuleParameters_004.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that module parameters remain constant. + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +/* Restriction B: Module parameters shall not be of port type, + * default type or component type and shall not be of a structured type that contains a sub-element of + * port type at any level of nesting.*/ + +module NegSem_080201_ModuleParameters_004 { + + modulepar integer MY_INT := 2; + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_004() runs on GeneralComp { + MY_INT := 3; // not allowed to change module parameter + if (MY_INT == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_004()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a variable or template variable was expected instead of module parameter `@NegSem_080201_ModuleParameters_004.MY_INT' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_080201_ModuleParameters_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 080201_005 Ensure that a reference to plain module parameter with a default value delivers the default value unless it is overwritten. > + +<COMPILE> + +<MODULE TTCN NegSem_080201_ModuleParameters_005 NegSem_080201_ModuleParameters_005.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a reference to plain module parameter with a default value delivers the default value unless it is overwritten. + ** @verdict pass reject + *****************************************************************/ +// A module parameter shall only be of type address if the address type is explicitly defined within the associated module + +module NegSem_080201_ModuleParameters_005 { + + modulepar address MY_ADDRESS_MODULE_PARAMETER := 2; // error: address type not defined + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_005() runs on GeneralComp { + if (MY_ADDRESS_MODULE_PARAMETER == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_005()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Type `address' is not defined in this module +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_080201_ModuleParameters_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 080201_006 Ensure that a module parameter is not allowed to be used in arrays > + +<COMPILE> + +<MODULE TTCN NegSem_080201_ModuleParameters_006 NegSem_080201_ModuleParameters_006.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a module parameter is not allowed to be used in arrays + ** @verdict pass reject + *****************************************************************/ +//Module parameters shall not be used in type or array definitions. + +module NegSem_080201_ModuleParameters_006 { + + modulepar integer MY_INT_MODULE_PARAMETER := 2; + + type component GeneralComp { + } + + type integer MyArrayType[MY_INT_MODULE_PARAMETER]; + // error: Module parameters shall not be used in type or array definitions. + + testcase TC_NegSem_080201_ModuleParameters_006() runs on GeneralComp { + + var MyArrayType v_arr := {2,3}; + + if (v_arr[0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_006()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to an \(evaluable\) constant value was expected instead of module parameter `@NegSem_080201_ModuleParameters_006.MY_INT_MODULE_PARAMETER' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_080201_ModuleParameters_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 080201_001 Ensure that module parameter can be declared within the module definition part only. > + +<COMPILE> + +<MODULE TTCN NegSyn_080201_ModuleParameters_001 NegSyn_080201_ModuleParameters_001.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that module parameter can be declared within the module definition part only. + ** @verdict pass reject, noexecution + *****************************************************************/ +module NegSyn_080201_ModuleParameters_001 { + + type component GeneralComp { + } + + testcase TC_NegSyn_080201_ModuleParameters_001() runs on GeneralComp { + modulepar integer MY_MODULE_PAR := 1; // not allowed to declared here + setverdict(fail); + } + + control { + execute(TC_NegSyn_080201_ModuleParameters_001()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `modulepar': syntax error, unexpected ModuleParKeyword +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_080201_ModuleParameters_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 080201_002 Ensure that module parameter can be declared within the module definition part only. > + +<COMPILE> + +<MODULE TTCN NegSyn_080201_ModuleParameters_002 NegSyn_080201_ModuleParameters_002.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that module parameter can be declared within the module definition part only. + ** @verdict pass reject, noexecution + *****************************************************************/ +module NegSyn_080201_ModuleParameters_002 { + modulepar integer MY_MODULE_PAR := 1; + modulepar integer MY_MODULE_PAR := 2; //error: not allowed to redeclare + + type component GeneralComp { + } + + testcase TC_NegSyn_080201_ModuleParameters_002() runs on GeneralComp { + setverdict(fail); + } + + control { + execute(TC_NegSyn_080201_ModuleParameters_002()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Duplicate definition with name `MY_MODULE_PAR' +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_08020301_GeneralFormatOfImport_002 negative test .*---------------------------------------------------------------------* @@ -2274,6 +2555,49 @@ error: any value is not allowed in this context <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_1101_ValueVars_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 1101_005 Variables should be assigned only by initialized variables > + +<COMPILE> +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_1101_ValueVars_005 NegSem_1101_ValueVars_005.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:11.1, Variables should be assigned only by initialized variables + ** @verdict pass reject + ***************************************************/ + +// The expression shall evaluate to a value, which is at least partially initialized. + +module NegSem_1101_ValueVars_005 { + type component GeneralComp {} + + testcase TC_NegSem_1101_ValueVars_005() runs on GeneralComp { + var integer v_i; + var integer v_j := v_i + 2; // error: v_i is uninitialized + + setverdict(pass); + } + + control { + execute(TC_NegSem_1101_ValueVars_005()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +Dynamic test case error: Unbound left operand of integer addition. +<END_RESULT> + +<END_TC> +:exmp + + *---------------------------------------------------------------------* :h3. NegSyn_1101_ValueVars_001 negative test .*---------------------------------------------------------------------* @@ -2367,6 +2691,49 @@ error: at or before token `var': syntax error, unexpected VarKeyword <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSyn_1102_TemplateVars_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 1102_002 Template variables should be assigned with unitialized variables > + +<COMPILE> + +<MODULE TTCN NegSyn_1102_TemplateVars_002 NegSyn_1102_TemplateVars_002.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:11.2, Template variables should be assigned with unitialized variables + ** @verdict pass reject + ***************************************************/ + +/* The following requirements are tested: +Restriction l) The template body at the right-hand side of the assignment symbol shall evaluate to a value or template, which is type compatible with the variable being declared. +*/ + +module NegSyn_1102_TemplateVars_002 { + type component GeneralComp {} + + testcase TC_NegSyn_1102_TemplateVars_002() runs on GeneralComp { + var integer v_i1 := 1; + var template float v_i2 := v_i1; // error: v_i1 is integer, meanwhile template type is float + + setverdict(pass); + } + + control { + execute(TC_NegSyn_1102_TemplateVars_002()); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Type mismatch: a value or template of type `float' was expected instead of `integer' +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h2. 12_timers folder .*---------------------------------------------------------------------* diff --git a/conformance_test/core_language_tests/negative_tests/08_empty_modules.script b/conformance_test/core_language_tests/negative_tests/08_empty_modules.script index 7dfc200d7..f04578711 100644 --- a/conformance_test/core_language_tests/negative_tests/08_empty_modules.script +++ b/conformance_test/core_language_tests/negative_tests/08_empty_modules.script @@ -282,6 +282,34 @@ error <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. Syn_0801_DefinitionOfAModule_010 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 0801_010 Ensure that a module definition with ed4.8.1 language and package is accepted. > + +<COMPILE> + +<MODULE TTCN Syn_0801_DefinitionOfAModule_010 Syn_0801_DefinitionOfAModule_010.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with ed4.8.1 language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_010 language "TTCN-3:2016" { + +} +<END_MODULE> + +<RESULT IF_PASS NEGATIVE> +error +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. Syn_0803_ModuleControlPart_003 negative test .*---------------------------------------------------------------------* diff --git a/conformance_test/core_language_tests/negative_tests/15_templates.script b/conformance_test/core_language_tests/negative_tests/15_templates.script index a6c85ceab..7c874d025 100644 --- a/conformance_test/core_language_tests/negative_tests/15_templates.script +++ b/conformance_test/core_language_tests/negative_tests/15_templates.script @@ -56,6 +56,47 @@ This TD contains negative tests from ETSI TTCN3 Conformance Test's 15_templates :h1.REQUIREMENT-BASED TESTS .*---------------------------------------------------------------------* .*---------------------------------------------------------------------* +:h2. 15_top_level folder +.*---------------------------------------------------------------------* +*---------------------------------------------------------------------* +:h3. NegSyn_15_TopLevel_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 15_001 Ensure that the expression or template body initializing a template shall evaluate to a value or template, which is type compatible with the template being declared. > + +<COMPILE> + +<MODULE TTCN NegSyn_15_TopLevel_001 NegSyn_15_TopLevel_001.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:15, Ensure that the expression or template body initializing a template shall evaluate to a value or template, which is type compatible with the template being declared. + ** @verdict pass reject, noexecution + *****************************************************************/ + +// The following requirement is tested: +//Restriction C: the expression or template body initializing a template shall evaluate to a value or template, which is type compatible with the template being declared. + +module NegSyn_15_TopLevel_001 { + + type record MyRecord { + integer myInt + } + + template MyRecord mw_myRecord := { + myInt := 2.1 // error: incompatible type (int req., float is given) + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: integer value was expected +<END_RESULT> + +<END_TC> +:exmp +.*---------------------------------------------------------------------* :h2. 1503_global_and_local_templates folder .*---------------------------------------------------------------------* *---------------------------------------------------------------------* @@ -3589,7 +3630,7 @@ error: Formal parameter with template restriction `present' not allowed here <MODULE TTCN NegSem_1508_TemplateRestrictions_043 NegSem_1508_TemplateRestrictions_043.ttcn > /****************************************************************************** ** @version 0.0.1 - ** @purpose 1:15.8, Ensure that template(present) can be parameter to template(omit) + ** @purpose 1:15.8, Ensure that template cannot be parameter to template(omit) ** @verdict pass reject *****************************************************************/ @@ -4202,6 +4243,55 @@ error: Reference to a value was expected instead of template `@NegSem_1509_Match <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_1509_MatchOperation_003 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 1509_003 Ensure that the match operation works correctly with enums. > + +<COMPILE> + +<MODULE TTCN NegSem_1509_MatchOperation_003 NegSem_1509_MatchOperation_003.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly with enums. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1509_MatchOperation_003 { + + type component GeneralComp { } + + type enumerated A_enum { A, B, C, D, E }; + type enumerated B_enum { A, F, G }; + + testcase TC_NegSem_1509_MatchOperation_003() runs on GeneralComp { + + var A_enum v_value := A; + + + if (match(v_value, B_enum:G)) { // error: different enum type + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1509_MatchOperation_003()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Type mismatch: a value of type `@NegSem_1509_MatchOperation_003.B_enum' was expected instead of `@NegSem_1509_MatchOperation_003.A_enum' +<END_RESULT> + +<END_TC> +:exmp + .*---------------------------------------------------------------------* :h2. 1510_valueof_operation folder .*---------------------------------------------------------------------* diff --git a/conformance_test/core_language_tests/negative_tests/16-20_folders.script b/conformance_test/core_language_tests/negative_tests/16-20_folders.script index 9a8c63fcf..c66c3ba68 100644 --- a/conformance_test/core_language_tests/negative_tests/16-20_folders.script +++ b/conformance_test/core_language_tests/negative_tests/16-20_folders.script @@ -2802,6 +2802,68 @@ error: The 'intOption' is already present in the 1. branch of select union <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_190302_select_union_statement_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 190302_006 verify that it is possible to use a select union statement with several branches > + +<COMPILE> + +<MODULE TTCN NegSem_190302_select_union_statement_006 NegSem_190302_select_union_statement_006.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that it is possible to use a select union statement with several branches + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// c) No two cases in a select union statement shall have the same caseIdentifier or TypeIdentifier. +module NegSem_190302_select_union_statement_006 { + + type component GeneralComp { + } + + testcase TC_NegSem_190302_select_union_statement_006() runs on GeneralComp { + var anytype v_any; + v_any.integer := 2; + v_any.charstring := "abc"; + v_any.float := 1.2; + + select union (v_any) { + case (charstring) { + if(match(v_any.charstring,"abc")) + {setverdict(pass, v_any.charstring);} + } case (integer) { + if(match(v_any.integer,2)) + {setverdict(pass, v_any.integer);} + } case (charstring) { // error + if(match(v_any.charstring,"abc")) + {setverdict(fail, v_any.charstring);} + } + case else { + setverdict(fail); + } + } + } + + control { + execute(TC_NegSem_190302_select_union_statement_006()); + } +} +with { + extension "anytype integer, charstring, float" +} +<END_MODULE> + +<RESULT COUNT 1> +error: The 'charstring' is already present in the 1. branch of select union +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_1904_for_statement_001 negative test .*---------------------------------------------------------------------* diff --git a/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script b/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script index 0e56412ad..5bc2895a9 100644 --- a/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script +++ b/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script @@ -2481,6 +2481,67 @@ error: The operand of operation `alive': Type mismatch: component array referenc <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_210305_alive_operation_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 210305_002 Verify that error occurs when any from alive is applied to 1D array and index target is array > + +<COMPILE> + +<MODULE TTCN NegSem_210305_alive_operation_002 NegSem_210305_alive_operation_002.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that error occurs when any from alive is applied to 1D array and index target is array + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction d +// If the index redirection is used for single-dimensional component arrays, the type +// of the integer variable shall allow storing the highest index of the respective array. +module NegSem_210305_alive_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210305_alive_operation_002() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index[1]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i mod 2 == 0) { v_ptc[i].kill; } //kill components on even indices + else { v_ptc[i].start(f());} // activate v_ptc + } + + v_isAlive := any from v_ptc.alive -> @index value v_index; + if(v_index[0] == 1){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_NegSem_210305_alive_operation_002(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Indices of one-dimensional component arrays can only be redirected to an integer +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_210305_alive_operation_003 negative test .*---------------------------------------------------------------------* @@ -2510,8 +2571,6 @@ module NegSem_210305_alive_operation_003 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_NegSem_210305_alive_operation_003() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 4; @@ -2519,7 +2578,7 @@ module NegSem_210305_alive_operation_003 { var float v_index; for (var integer i := 0; i < c_size; i := i + 1) { v_ptc[i] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0) { v_ptc[i].start(f_done()); } //quick done components on even indices + if (i mod 2 == 0) { v_ptc[i].kill; } //kill components on even indices else { v_ptc[i].start(f());} // activate v_ptc } v_isAlive := any from v_ptc.alive -> @index value v_index; @@ -2574,8 +2633,6 @@ module NegSem_210305_alive_operation_004 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_NegSem_210305_alive_operation_004() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 3; @@ -2584,7 +2641,7 @@ module NegSem_210305_alive_operation_004 { for (var integer i := 0; i < c_size; i := i + 1) { for (var integer j := 0; j < c_size; j := j + 1) { v_ptc[i][j] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i][j].start(f_done()); } //quick done components on even i or odd j + if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i].kill; } //kill components on even i or odd j else { v_ptc[i][j].start(f());} // activate v_ptc } } @@ -2643,8 +2700,6 @@ module NegSem_210305_alive_operation_005 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_NegSem_210305_alive_operation_005() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 3; @@ -2653,7 +2708,7 @@ module NegSem_210305_alive_operation_005 { for (var integer i := 0; i < c_size; i := i + 1) { for (var integer j := 0; j < c_size; j := j + 1) { v_ptc[i][j] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i][j].start(f_done()); } //quick done components on even i or odd j + if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i].kill; } //kill components on even i or odd j else { v_ptc[i][j].start(f());} // activate v_ptc } } diff --git a/conformance_test/core_language_tests/negative_tests/22_communication_operations.script b/conformance_test/core_language_tests/negative_tests/22_communication_operations.script index ba6303a54..5c1320064 100644 --- a/conformance_test/core_language_tests/negative_tests/22_communication_operations.script +++ b/conformance_test/core_language_tests/negative_tests/22_communication_operations.script @@ -661,7 +661,8 @@ error: Cannot determine the type of the outgoing message *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220201_SendOperation_010 { @@ -3262,7 +3263,8 @@ error: Catching of `timeout' exception is not allowed because the previous `call *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220301_CallOperation_003 { @@ -3298,501 +3300,434 @@ Dynamic test case error: The second argument of connect operation contains the n :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_001 negative test +:h3. NegSem_220301_CallOperation_005 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_001 Ensure that getcall operations are only used on procedure based ports > +<TC - 220301_005 incompatible template in the to clause of the call operation > <COMPILE> -<MODULE TTCN NegSem_220302_GetcallOperation_001 NegSem_220302_GetcallOperation_001.ttcn > -/*************************************************** +<MODULE TTCN NegSem_220301_CallOperation_005 NegSem_220301_CallOperation_005.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Ensure that getcall operations are only used on procedure based ports + ** @purpose 1:22.3.1, incompatible template in the to clause of the call operation ** @verdict pass reject - ***************************************************/ + *****************************************************************/ -module NegSem_220302_GetcallOperation_001 { +// The following requirements are tested: +// f) All AddressRef items in the to clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type (see +// section 6.2.9) of the port instance referenced in the call operation. - type port loopbackPort message { - inout integer - } with {extension "internal"} +module NegSem_220301_CallOperation_005 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} type component GeneralComp { - port loopbackPort messagePort + port P p; + } + + testcase TC_NegSem_220301_CallOperation_005() runs on GeneralComp system GeneralComp { + var charstring v_addr := "addr"; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait) to v_addr; + setverdict(pass); } - testcase TC_NegSem_220302_GetcallOperation_001() runs on GeneralComp { + control { + execute(TC_NegSem_220301_CallOperation_005(), 5.0); + } +} +<END_MODULE> - connect(self:messagePort, self:messagePort); +<RESULT COUNT 1> +error: Type mismatch: The type of the operand should be a component type instead of `charstring' +<END_RESULT> - messagePort.send(2); +<END_TC> +:exmp - alt { - [] messagePort.getcall { //cannot use getcall on a message based port - setverdict(pass); - } - [] messagePort.receive { - setverdict(fail); - } - } +*---------------------------------------------------------------------* +:h3. NegSem_220301_CallOperation_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220301_006 verify that non-blocking calls cannot have a response and exception handling part > + +<COMPILE> + +<MODULE TTCN NegSem_220301_CallOperation_006 NegSem_220301_CallOperation_006.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that non-blocking calls cannot have a response and exception handling part + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// In case of non-blocking procedure-based communication the handling of exceptions +// to call operations is done by using catch (see clause 22.3.6) operations as +// alternatives in alt statements. +// A non-blocking procedure has no out and inout parameters, no return value and the +// non-blocking property is indicated in the corresponding signature definition by means +// of a noblock keyword. Possible exceptions raised by non-blocking procedures have to be +// removed from the port queue by using catch operations in subsequent alt or interleave +// statements. + +module NegSem_220301_CallOperation_006 { + + signature S() noblock; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:?); + p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_called); + p.call(S:{}) { + [] p.getreply(S:{}) {} + } + setverdict(pass); } control{ - execute(TC_NegSem_220302_GetcallOperation_001()); + execute(TC_NegSem_220301_CallOperation_006(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -error: Procedure-based operation `getcall' is not applicable to a message-based port of type `@NegSem_220302_GetcallOperation_001.loopbackPort' +error: A call of non-blocking signature `@NegSem_220301_CallOperation_006.S' cannot have response and exception handling part +<END_RESULT> +<RESULT COUNT 1> +error: Operation `getreply' is not applicable to non-blocking signature `@NegSem_220301_CallOperation_006.S' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_002 negative test +:h3. NegSem_220301_CallOperation_007 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_002 Ensure that getcall operation does not allow value assignment > +<TC - 220301_007 verify that signature that are not listed in the port inout and out list cannot be used in call operations > <COMPILE> -<MODULE TTCN NegSem_220302_GetcallOperation_002 NegSem_220302_GetcallOperation_002.ttcn > +<MODULE TTCN NegSem_220301_CallOperation_007 NegSem_220301_CallOperation_007.ttcn > /***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Ensure that getcall operation does not allow value assignment + ** @purpose 1:22.3.1, verify that signature that are not listed in the port inout and out list cannot be used in call operations ** @verdict pass reject *****************************************************************/ -module NegSem_220302_GetcallOperation_002 { +// The following requirements are tested: +// a) The call operation shall only be used on procedure-based ports. The type definition +// of the port at which the call operation takes place shall include the procedure name +// in its out or inout list i.e. it shall be allowed to call this procedure at this port. - /** - * @desc testing of inline return template for remote procedure call - * @param p_par1 only input parameter - * @param p_par2 must have value 4 at return - * @param p_par3 must have value 5 at return - * @return must return value 1 - */ - signature p_NegSem_220302_GetcallOperation_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; +module NegSem_220301_CallOperation_007 { - template p_NegSem_220302_GetcallOperation_002 s_returnTemplate := { - p_par1 := 0, // p_par1 := -, core dump - p_par2 := 4, - p_par3 := 5 - } + signature S1() noblock; + signature S2() noblock; - template p_NegSem_220302_GetcallOperation_002 s_wrongTemplate := { - p_par1 := 0, // p_par1 := -, core dump - p_par2 := 2, - p_par3 := 3 + type port P procedure { + inout S1; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220301_CallOperation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(S2:{}); // error expected + setverdict(pass); } - template p_NegSem_220302_GetcallOperation_002 s_callTemplate := { - p_par1 := 1, - p_par2 := 0, // p_par2 := -, core dump - p_par3 := 3 + control{ + execute(TC_NegSem_220301_CallOperation_007(), 5.0); } - type port remotePort procedure { - inout p_NegSem_220302_GetcallOperation_002; - } with {extension "internal"} +} +<END_MODULE> - type component GeneralComp { - port remotePort PCO; - } +<RESULT COUNT 1> +error: Incompatible explicit type specification: `@NegSem_220301_CallOperation_007.S1' was expected instead of `@NegSem_220301_CallOperation_007.S2' +<END_RESULT> - function f_ClientQuery() runs on GeneralComp { - var integer v_zero:=0; - var integer v_one:=1; - - PCO.call(p_NegSem_220302_GetcallOperation_002:s_callTemplate, 5.0) { - - [] PCO.getreply(p_NegSem_220302_GetcallOperation_002:s_wrongTemplate value 1) { - setverdict(fail); - } - [] PCO.getreply(p_NegSem_220302_GetcallOperation_002:s_returnTemplate value 2) { - setverdict(fail); - } - [v_one>v_zero] PCO.getreply(p_NegSem_220302_GetcallOperation_002:s_returnTemplate value 1) { //check that boolean guard is correctly evaluated - setverdict(pass); - } - [] PCO.catch (timeout) { - setverdict(fail); - } - } - } +<END_TC> +:exmp - function f_ServerResponses() runs on GeneralComp { - - var integer v_par1; - var integer v_par3; - var integer v_return; - timer t_timeout:=30.0; +*---------------------------------------------------------------------* +:h3. NegSem_220301_CallOperation_008 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. - template p_NegSem_220302_GetcallOperation_002 s_acceptTemplate := { - p_par1 := ?, - p_par2 := ?, - p_par3 := ? - }; +<TC - 220301_008 verify that in parameters of a signature used in a call operation cannot contain matching symbols > - - t_timeout.start; - - alt { - [] PCO.getcall(p_NegSem_220302_GetcallOperation_001:s_acceptTemplate) -> value v_return { - //not allowed assignment - } - [] t_timeout.timeout { - } - } - - } +<COMPILE> +<EXECUTE_PARALLEL> - - testcase TC_NegSem_220302_GetcallOperation_002() runs on GeneralComp system GeneralComp { - var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); - var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); - timer t_wait:=1.0; - - connect(server:PCO, client:PCO); +<MODULE TTCN NegSem_220301_CallOperation_008 NegSem_220301_CallOperation_008.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that in parameters of a signature used in a call operation cannot contain matching symbols + ** @verdict pass reject + *****************************************************************/ - server.start(f_ServerResponses()); - client.start(f_ClientQuery()); +// The following requirements are tested: +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. - alt { - [] client.done { - t_wait.start; - while(t_wait.running) { - //this gives a chance for server to still test for second getcall match - } - server.stop; - } - } +module NegSem_220301_CallOperation_008 { - alt { - [] all component.done {} - } + signature S(in integer p_par) noblock; - disconnect(server:PCO, client:PCO); - } + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := ? }; + + testcase TC_NegSem_220301_CallOperation_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1); + setverdict(pass); + } control{ - execute(TC_NegSem_220302_GetcallOperation_002()); + execute(TC_NegSem_220301_CallOperation_008(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -error: at or before token `value': syntax error, unexpected ValueKeyword, expecting ParamKeyword or SenderKeyword -<END_RESULT> -<RESULT COUNT 1> -error: at or before token `testcase': syntax error, unexpected TestcaseKeyword, expecting \$end +Dynamic test case error: Performing a valueof or send operation on a non-specific integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_003 negative test +:h3. NegSem_220301_CallOperation_009 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_003 Ensure that getcall for any call does not allow param assignment > +<TC - 220301_009 verify that in parameters of a signature used in a call operation cannot be omitted > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_003 NegSem_220302_GetcallOperation_003.ttcn > + +<MODULE TTCN NegSem_220301_CallOperation_009 NegSem_220301_CallOperation_009.ttcn > /***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Ensure that getcall for any call does not allow param assignment + ** @purpose 1:22.3.1, verify that in parameters of a signature used in a call operation cannot be omitted ** @verdict pass reject *****************************************************************/ -module NegSem_220302_GetcallOperation_003 { - - /** - * @desc testing of inline return template for remote procedure call - * @param p_par1 only input parameter - * @param p_par2 must have value 4 at return - * @param p_par3 must have value 5 at return - * @return must return value 1 - */ - signature p_NegSem_220302_GetcallOperation_003(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; +// The following requirements are tested: +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. - template p_NegSem_220302_GetcallOperation_003 s_returnTemplate := { - p_par1 := 0, // p_par1 := -, core dump - p_par2 := 4, - p_par3 := 5 - } +module NegSem_220301_CallOperation_009 { - template p_NegSem_220302_GetcallOperation_003 s_wrongTemplate := { - p_par1 := 0, // p_par1 := -, core dump - p_par2 := 2, - p_par3 := 3 - } + signature S(in integer p_par) noblock; - template p_NegSem_220302_GetcallOperation_003 s_callTemplate := { - p_par1 := 1, - p_par2 := 0, // p_par2 := -, core dump - p_par3 := 3 - } - - type port remotePort procedure { - inout p_NegSem_220302_GetcallOperation_003; + type port P procedure { + inout S; } with {extension "internal"} type component GeneralComp { - port remotePort PCO; - } - - function f_ClientQuery() runs on GeneralComp { - var integer v_zero:=0; - var integer v_one:=1; - - PCO.call(p_NegSem_220302_GetcallOperation_003:s_callTemplate, 5.0) { - - [] PCO.getreply(p_NegSem_220302_GetcallOperation_003:s_wrongTemplate value 1) { - setverdict(fail); - } - [] PCO.getreply(p_NegSem_220302_GetcallOperation_003:s_returnTemplate value 2) { - setverdict(fail); - } - [v_one>v_zero] PCO.getreply(p_NegSem_220302_GetcallOperation_003:s_returnTemplate value 1) { //check that boolean guard is correctly evaluated - setverdict(pass); - } - [] PCO.catch (timeout) { - setverdict(fail); - } - } + port P p; } - - function f_ServerResponses() runs on GeneralComp { - var integer v_par1; - var integer v_par3; - timer t_timeout:=30.0; - - template p_NegSem_220302_GetcallOperation_003 s_acceptTemplate := { - p_par1 := ?, - p_par2 := ?, - p_par3 := ? - }; - - - t_timeout.start; + template S s_signature1 := { p_par := - }; - alt { - [] PCO.getcall -> param(v_par1, v_par3) { //not allowed param assignment for any call - } - [] t_timeout.timeout { - } - } - + testcase TC_NegSem_220301_CallOperation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1); + setverdict(pass); } - - testcase TC_NegSem_220302_GetcallOperation_003() runs on GeneralComp system GeneralComp { - var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); - var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); - timer t_wait:=1.0; - - // map the PTCs to the system port - connect(server:PCO, client:PCO); - - server.start(f_ServerResponses()); - client.start(f_ClientQuery()); - - alt { - [] client.done { - t_wait.start; - while(t_wait.running) { - //this gives a chance for server to still test for second getcall match - } - server.stop; - } - } - - alt { - [] all component.done {} - } - - disconnect(server:PCO, client:PCO); - } - control{ - execute(TC_NegSem_220302_GetcallOperation_003()); + execute(TC_NegSem_220301_CallOperation_009(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -error: Parameter redirect cannot be used without signature template +Dynamic test case error: Performing a valueof or send operation on a non-specific integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_004 negative test +:h3. NegSem_220301_CallOperation_010 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_004 Verify that error occurs when any from getcall is applied to single port > +<TC - 220301_010 verify that inout parameters of a signature used in a call operation cannot contain matching symbols > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_004 NegSem_220302_GetcallOperation_004.ttcn > -/****************************************************************************** + +<MODULE TTCN NegSem_220301_CallOperation_010 NegSem_220301_CallOperation_010.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Verify that error occurs when any from getcall is applied to single port + ** @purpose 1:22.3.1, verify that inout parameters of a signature used in a call operation cannot contain matching symbols ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// Restriction g -// The PortArrayRef shall be a reference to a port array variable identifier. -module NegSem_220302_GetcallOperation_004 { +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220301_CallOperation_010 { + + signature S(inout integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} - signature S(); - - type port P procedure { - inout S; - } with {extension "internal"} - type component GeneralComp { - port P p; - } + port P p; + } - function f() runs on GeneralComp - { - var integer v_index; - alt - { - [] any from p.getcall { setverdict(pass); } - [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } - } - } + template S s_signature1 := { p_par := ? }; - testcase TC_NegSem_220302_GetcallOperation_004() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create; - connect(self:p, v_ptc:p); - p.call(S:{}, nowait); - v_ptc.start(f()); - v_ptc.done; + testcase TC_NegSem_220301_CallOperation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1, nowait); + setverdict(pass); } - control { - execute(TC_NegSem_220302_GetcallOperation_004(), 5.0); + control{ + execute(TC_NegSem_220301_CallOperation_010(), 5.0); } + } <END_MODULE> <RESULT COUNT 1> -error: Reference to a port array was expected instead of a port +Dynamic test case error: Performing a valueof or send operation on a non-specific integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_005 negative test +:h3. NegSem_220301_CallOperation_011 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_005 Verify that error occurs when any from getcall is applied to 1D array and index target is array > +<TC - 220301_011 verify that inout parameters of a signature used in a call operation cannot be omitted > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_005 NegSem_220302_GetcallOperation_005.ttcn > -/****************************************************************************** + +<MODULE TTCN NegSem_220301_CallOperation_011 NegSem_220301_CallOperation_011.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Verify that error occurs when any from getcall is applied to 1D array and index target is array + ** @purpose 1:22.3.1, verify that inout parameters of a signature used in a call operation cannot be omitted ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// Restriction i -// If the index redirection is used for single-dimensional port arrays, the type -// of the integer variable shall allow storing the highest index of the respective array. -module NegSem_220302_GetcallOperation_005 { +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. - signature S(); - - type port P procedure { - inout S; - } - - const integer c_portCount := 4; +module NegSem_220301_CallOperation_011 { + + signature S(inout integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} type component GeneralComp { - port P p[c_portCount]; - } + port P p; + } - function f() runs on GeneralComp - { - var integer v_index[1]; - alt - { - [] any from p.getcall(S:{}) -> @index value v_index { - if(v_index[0] == 1){ - setverdict(pass); - } else { - setverdict(fail, "Index or parameter value incorrectly assigned"); - } - } - [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } - } - } + template S s_signature1 := { p_par := - }; - testcase TC_NegSem_220302_GetcallOperation_005() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create; - for(var integer i := 0; i < c_portCount; i := i + 1) { - connect(self:p[i], v_ptc:p[i]); - if (i mod 2 > 0) { p[i].call(S:{}, nowait); } - } - v_ptc.start(f()); - v_ptc.done; + testcase TC_NegSem_220301_CallOperation_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1, nowait); + setverdict(pass); } - control { - execute(TC_NegSem_220302_GetcallOperation_005(), 5.0); + control{ + execute(TC_NegSem_220301_CallOperation_011(), 5.0); } + } <END_MODULE> <RESULT COUNT 1> -error: Indices of one-dimensional port arrays can only be redirected to an integer +Dynamic test case error: Performing a valueof or send operation on a non-specific integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_006 negative test +:h3. NegSem_220301_CallOperation_012 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_006 Verify that error occurs when any from getcall is applied to 1D array and index target has wrong type > +<TC - 220301_012 missing to clause in case of one-to-many connections > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_006 NegSem_220302_GetcallOperation_006.ttcn > -/****************************************************************************** + +<MODULE TTCN NegSem_220301_CallOperation_012 NegSem_220301_CallOperation_012.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Verify that error occurs when any from getcall is applied to 1D array and index target has wrong type + ** @purpose 1:22.3.1, missing to clause in case of one-to-many connections ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// Restriction i -// If the index redirection is used for single-dimensional port arrays, the type -// of the integer variable shall allow storing the highest index of the respective array. -module NegSem_220302_GetcallOperation_006 { +// e) A to clause shall be present in case of one-to-many connections. + +module NegSem_220301_CallOperation_012 { signature S(); @@ -3800,367 +3735,324 @@ module NegSem_220302_GetcallOperation_006 { inout S; } with {extension "internal"} - const integer c_portCount := 4; - type component GeneralComp { - port P p[c_portCount]; + port P p; } - function f() runs on GeneralComp - { - var float v_index; - alt - { - [] any from p.getcall(S:{}) -> @index value v_index { - if(v_index == 1.0){ - setverdict(pass); - } else { - setverdict(fail, "Index or parameter value incorrectly assigned"); - } - } - [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } - } + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); } - testcase TC_NegSem_220302_GetcallOperation_006() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create; - for(var integer i := 0; i < c_portCount; i := i + 1) { - connect(self:p[i], v_ptc:p[i]); - if (i mod 2 > 0) { p[i].call(S:{}, nowait); } + testcase TC_NegSem_220301_CallOperation_012() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create; + + var integer v_counter := 0; + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + + p.call(S:{}) { // error expected as the to clause is missing + [] p.getreply(S:{}) { + v_counter := v_counter + 1; + if (v_counter < 2) { + repeat; + } else { + setverdict(pass, "Both replies received"); } + } } - v_ptc.start(f()); - v_ptc.done; } control { - execute(TC_NegSem_220302_GetcallOperation_006(), 5.0); + execute(TC_NegSem_220301_CallOperation_012(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -error: Indices of port arrays can only be redirected to an integer, an integer array or a record of integers +Dynamic test case error: Port p has more than one active connections. Message can be sent on it only with explicit addressing. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_007 negative test +:h3. NegSem_220301_CallOperation_013 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_007 Verify that any from getcall index redirection for multi-D arrays requires arrays of correct size > +<TC - 220301_013 verify that type mismatch error is issued for incorrect call timer values > <COMPILE> -<MODULE TTCN NegSem_220302_GetcallOperation_007 NegSem_220302_GetcallOperation_007.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220301_CallOperation_013 NegSem_220301_CallOperation_013.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Verify that any from getcall index redirection for multi-D arrays requires arrays of correct size + ** @purpose 1:22.3.1, verify that type mismatch error is issued for incorrect call timer values ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// Restriction j: -// If the index redirection is used for multi-dimensional component arrays, the size -// of the integer array or record of integer type shall exactly be the same as the dimension -// of the respective array, and its type shall allow storing the highest index (from all -// dimensions) of the array. -module NegSem_220302_GetcallOperation_007 { +// g) CallTimerValue shall be of type float. - signature S(integer p_par); +module NegSem_220301_CallOperation_013 { + + signature S(); type port P procedure { inout S; } with {extension "internal"} - const integer c_portCount := 3; type component GeneralComp { - port P p[c_portCount][c_portCount]; + port P p; } - function f() runs on GeneralComp - { - var integer v_index[1], v_parValue; - var GeneralComp v_src; - alt - { - [] any from p.getcall(S:{p_par := (0..c_portCount)}) -> sender v_src @index value v_index { - if(v_index[0] == 1 and v_index[1] == 2 and v_parValue == v_index[0] + 1){ - setverdict(pass); - } else { - setverdict(fail, "Indices or parameter value incorrectly assigned"); - } - } - [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } - } + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); } - - testcase TC_NegSem_220302_GetcallOperation_007() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create; - for(var integer i := 0; i < c_portCount; i := i + 1) { - for(var integer j := 0; j < c_portCount; j := j + 1) { - connect(self:p[i][j], v_ptc:p[i][j]); - if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].call(S:{ p_par := i + 1 }, nowait); } - } + testcase TC_NegSem_220301_CallOperation_013() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}, 2) { // error expected as 2 is an integer literal + [] p.getreply(S:{}) {} + [] p.catch(timeout) {} } - v_ptc.start(f()); - v_ptc.done; + setverdict(pass); } control { - execute(TC_NegSem_220302_GetcallOperation_007(), 5.0); + execute(TC_NegSem_220301_CallOperation_013(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -error: Size of integer array is invalid: the port array has 2 dimensions, but the integer array has 1 element -<END_RESULT> -<RESULT COUNT 1> -error: Array index overflow: the index value must be at most `0' instead of `1' +error: A value or expression of type float was expected <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_008 negative test +:h3. NegSem_220301_CallOperation_014 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_008 Verify that any from getcall index redirection for multi-D arrays requires arrays > +<TC - 220301_014 verify that getreply signature mismatch in the response and exception handling causes an error > <COMPILE> -<MODULE TTCN NegSem_220302_GetcallOperation_008 NegSem_220302_GetcallOperation_008.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220301_CallOperation_014 NegSem_220301_CallOperation_014.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Verify that any from getcall index redirection for multi-D arrays requires arrays + ** @purpose 1:22.3.1, verify that getreply signature mismatch in the response and exception handling causes an error ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// Restriction j: -// If the index redirection is used for multi-dimensional component arrays, the size -// of the integer array or record of integer type shall exactly be the same as the dimension -// of the respective array, and its type shall allow storing the highest index (from all -// dimensions) of the array. -module NegSem_220302_GetcallOperation_008 { +// h) The selection of the alternatives to a call shall only be based on getreply and catch operations +// for the called procedure. Unqualified getreply and catch operations shall only treat replies from +// and exceptions raised by the called procedure. - signature S(integer p_par); +module NegSem_220301_CallOperation_014 { + + signature S1(); + signature S2(); type port P procedure { - inout S; + inout S1, S2; } with {extension "internal"} - const integer c_portCount := 3; type component GeneralComp { - port P p[c_portCount][c_portCount]; + port P p; } - function f() runs on GeneralComp - { - var integer v_index, v_parValue; - var GeneralComp v_src; - alt - { - [] any from p.getcall(S:{p_par := (0..c_portCount)}) -> param (v_parValue := p_par) sender v_src @index value v_index { - if(v_index == 1 and v_parValue == v_index + 1){ - setverdict(pass); - } else { - setverdict(fail, "Indices or parameter value incorrectly assigned"); - } - } - [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } - } + function f_called() runs on GeneralComp { + p.getcall(S1:{}); + p.reply(S1:{}); } - testcase TC_NegSem_220302_GetcallOperation_008() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create; - for(var integer i := 0; i < c_portCount; i := i + 1) { - for(var integer j := 0; j < c_portCount; j := j + 1) { - connect(self:p[i][j], v_ptc:p[i][j]); - if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].call(S:{ p_par := i + 1 }, nowait); } - } + testcase TC_NegSem_220301_CallOperation_014() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S1:{}) { + [] p.getreply(S1:{}) { setverdict(pass, "Reply accepted"); } + [] p.getreply(S2:{}) {} // error expected } - v_ptc.start(f()); - v_ptc.done; } control { - execute(TC_NegSem_220302_GetcallOperation_008(), 5.0); + execute(TC_NegSem_220301_CallOperation_014(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -error: Indices of multi-dimensional port arrays can only be redirected to an integer array or a record of integers +error: The `getreply' operation refers to a different signature than the previous `call' statement: `@NegSem_220301_CallOperation_014.S1' was expected instead of `@NegSem_220301_CallOperation_014.S2' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_009 negative test +:h3. NegSem_220301_CallOperation_015 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_009 null component in the from clause of the getcall operation > +<TC - 220301_015 verify that exception signature mismatch in the response and exception handling causes an error > <COMPILE> -<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_009 NegSem_220302_GetcallOperation_009.ttcn > +<MODULE TTCN NegSem_220301_CallOperation_015 NegSem_220301_CallOperation_015.ttcn > /***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, null component in the from clause of the getcall operation + ** @purpose 1:22.3.1, verify that exception signature mismatch in the response and exception handling causes an error ** @verdict pass reject *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// h) The selection of the alternatives to a call shall only be based on getreply and catch operations +// for the called procedure. Unqualified getreply and catch operations shall only treat replies from +// and exceptions raised by the called procedure. -module NegSem_220302_GetcallOperation_009 { +module NegSem_220301_CallOperation_015 { - signature S(); + signature S1() exception(integer); + signature S2() exception(charstring); type port P procedure { - inout S; + inout S1, S2; } with {extension "internal"} type component GeneralComp { port P p; } - function f() runs on GeneralComp - { - var GeneralComp v_compRef := null; - connect(self:p, v_compRef:p); - - alt { - [] p.getcall(S:{}) from v_compRef { setverdict(pass, "first branch");} // error expected - [] p.getcall(S:{}) { setverdict(fail, "second branch"); } - } + function f_called() runs on GeneralComp { + p.getcall(S1:{}); + p.raise(S1, 1); } - testcase TC_NegSem_220302_GetcallOperation_009() runs on GeneralComp system GeneralComp { + testcase TC_NegSem_220301_CallOperation_015() runs on GeneralComp system GeneralComp { var GeneralComp v_ptc := GeneralComp.create; connect(self:p, v_ptc:p); - p.call(S:{}, nowait); - v_ptc.start(f()); - v_ptc.done; - setverdict(pass); + v_ptc.start(f_called()); + p.call(S1:{}) { + [] p.catch(S1, integer:?) { setverdict(pass, "Exception caught!"); } + [] p.catch(S2, charstring:?) {} // expected error + } } control { - execute(TC_NegSem_220302_GetcallOperation_009(), 5.0); + execute(TC_NegSem_220301_CallOperation_015(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -Dynamic test case error: The second argument of connect operation contains the null component reference. +error: The `catch' operation refers to a different signature than the previous `call' statement: `@NegSem_220301_CallOperation_015.S1' was expected instead of `@NegSem_220301_CallOperation_015.S2' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_011 negative test +:h3. NegSem_220301_CallOperation_018 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_011 applying @decoded to a forbidden field > +<TC - 220301_018 verify that exception signature mismatch in the response and exception handling causes an error > <COMPILE> -<MODULE TTCN NegSem_220302_GetcallOperation_011 NegSem_220302_GetcallOperation_011.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220301_CallOperation_018 NegSem_220301_CallOperation_018.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, applying @decoded to a forbidden field + ** @purpose 1:22.3.1, verify that non-blocking procedure calls cannot contain timeout values ** @verdict pass reject *****************************************************************/ // The following requirements are tested: -// When assigning individual fields of a message, encoded payload fields can be -// decoded prior to assignment using the @decoded modifier. In this case, the -// referenced field on the right hand sided of the assignment shall be one of the -// bitstring, hexstring, octetstring, charstring or universal charstring types. It -// shall be decoded into a value of the same type as the variable on the left hand -// side of the assignment. +// l) The call operation for a non-blocking procedure shall have no response and exception +// handling part, shall raise no timeout exception and shall not use the nowait keyword. -module NegSem_220302_GetcallOperation_011 { - type record of integer RoI (0..255); - - signature S(RoI p_par); - +module NegSem_220301_CallOperation_018 { + + signature S() noblock; + type port P procedure { inout S; - } with {extension "internal"} + } type component GeneralComp { port P p; } - - function f_server() runs on GeneralComp { - var integer v_res; - alt { - [] p.getcall(S: {p_par := ?} ) -> param (v_res := @decoded p_par) { - setverdict (pass); - } - [] p.getcall { setverdict(fail); } - } - } - - testcase TC_NegSem_220302_GetcallOperation_011() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create("PTC"); - connect(self:p, v_ptc:p); - v_ptc.start(f_server()); - p.call(S:{ p_par := { 0, 0, 0, 0 } }, nowait); - v_ptc.done; - setverdict(pass); + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_018() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}, 1.0); + alt { + [] p.getreply(S:{}) + { setverdict(pass, "Reply accepted"); } // guard error expected + } } control { - execute(TC_NegSem_220302_GetcallOperation_011(), 5.0); + execute(TC_NegSem_220301_CallOperation_018(), 5.0); } -} with {encode "RAW"} +} <END_MODULE> -<RESULT COUNT> -error: The '@decoded' modifier is only available to parameter redirects of string types. +<RESULT COUNT 1> +error: Operation `reply' is not applicable to non-blocking signature `@NegSem_220301_CallOperation_018.S' +<END_RESULT> +<RESULT COUNT 1> +error: A call of non-blocking signature `@NegSem_220301_CallOperation_018.S' cannot have call timer +<END_RESULT> +<RESULT COUNT 1> +error: Operation `getreply' is not applicable to non-blocking signature `@NegSem_220301_CallOperation_018.S' <END_RESULT> <END_TC> :exmp - *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_012 negative test +:h3. NegSem_220301_CallOperation_019 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_012 decoding error in @decoded redirect assignment > +<TC - 220301_019 verify that non-blocking procedure calls cannot contain nowait parameter > <COMPILE> -<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_012 NegSem_220302_GetcallOperation_012.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220301_CallOperation_019 NegSem_220301_CallOperation_019.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, decoding error in @decoded redirect assignment + ** @purpose 1:22.3.1, verify that non-blocking procedure calls cannot contain nowait parameter ** @verdict pass reject *****************************************************************/ // The following requirements are tested: -// Failure of this decoding shall cause a test case error. +// l) The call operation for a non-blocking procedure shall have no response and exception +// handling part, shall raise no timeout exception and shall not use the nowait keyword. -module NegSem_220302_GetcallOperation_012 { - signature S(charstring p_par); +module NegSem_220301_CallOperation_019 { - type integer I with { variant "32 bit"}; - + signature S() noblock; + type port P procedure { inout S; } with {extension "internal"} @@ -4168,68 +4060,61 @@ module NegSem_220302_GetcallOperation_012 { type component GeneralComp { port P p; } - - function f_server() runs on GeneralComp { - var I v_res; - alt { - [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded p_par) { - setverdict (pass); - } - [] p.getcall { setverdict(pass); } - } - } - testcase TC_NegSem_220302_GetcallOperation_012() runs on GeneralComp system GeneralComp { - var I v_src := 1953719668; - var charstring v_str := oct2char(bit2oct(encvalue(v_src))) & "abcdefgij"; - - var GeneralComp v_ptc := GeneralComp.create("PTC"); - connect(self:p, v_ptc:p); - v_ptc.start(f_server()); - - p.call(S:{ p_par := v_str }, nowait); - - v_ptc.done; - setverdict(pass); + function f_called() runs on GeneralComp { + //p.getcall(S:{}); + //p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_019() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}, nowait); + /*alt { + [] p.getreply(S:{}) + { setverdict(pass, "Reply accepted"); } // guard error expected + }*/ } control { - execute(TC_NegSem_220302_GetcallOperation_012(), 5.0); + execute(TC_NegSem_220301_CallOperation_019(), 5.0); } -} with { encode "RAW"} +} <END_MODULE> -<RESULT COUNT> -Dynamic test case error: Parameter redirect \(for parameter 'p__par'\) failed, because the buffer was not empty after decoding. Remaining octets: 9. +<RESULT COUNT 1> +error: A call of non-blocking signature `@NegSem_220301_CallOperation_019.S' cannot use the `nowait' keyword <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_013 negative test +:h3. NegSem_220301_CallOperation_020 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_013 invalid format value in @decoded redirect assignment > +<TC - 220301_020 verify that calls cannot be used on disconnected ports > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_013 NegSem_220302_GetcallOperation_013.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220301_CallOperation_020 NegSem_220301_CallOperation_020.ttcn > +/***************************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, invalid format value in @decoded redirect assignment + ** @purpose 1:22.3.1, verify that calls cannot be used on disconnected ports ** @verdict pass reject *****************************************************************/ // The following requirements are tested: -// Any other value shall cause an error. +// m) Applying a call operation to an unmapped or disconnected port shall cause a test +// case error. -module NegSem_220302_GetcallOperation_013 { - signature S(universal charstring p_par); +module NegSem_220301_CallOperation_020 { - type integer I with { variant "32 bit"}; - + signature S() noblock; + type port P procedure { inout S; } with {extension "internal"} @@ -4237,398 +4122,1967 @@ module NegSem_220302_GetcallOperation_013 { type component GeneralComp { port P p; } - - function f_server() runs on GeneralComp { - var I v_res; - alt { - [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded("proprietary") p_par) { - setverdict(pass); - } - [] p.getcall { setverdict(pass); } - } + + testcase TC_NegSem_220301_CallOperation_020() runs on GeneralComp system GeneralComp { + p.call(S:{}); } - - testcase TC_NegSem_220302_GetcallOperation_013() runs on GeneralComp system GeneralComp { - var I v_src := 1953719668; - var universal charstring v_str := encvalue_unichar(v_src); - var GeneralComp v_ptc := GeneralComp.create("PTC"); + control { + execute(TC_NegSem_220301_CallOperation_020(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +Dynamic test case error: Port p has neither connections nor mappings. Message cannot be sent on it. +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_220301_CallOperation_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220301_001 verify that the response and exception handling part cannot contain an else clause > + +<COMPILE> + +<MODULE TTCN NegSyn_220301_CallOperation_001 NegSyn_220301_CallOperation_001.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that the response and exception handling part cannot contain an else clause + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// h) The use of else branches and the invocation of altsteps is not allowed. + +module NegSyn_220301_CallOperation_001 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSyn_220301_CallOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}) { + [] p.getreply(S:{}) { setverdict(pass); } + [else] {} // expected error + } + } + + control { + execute(TC_NegSyn_220301_CallOperation_001(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `else': syntax error, unexpected ElseKeyword +<END_RESULT> +<RESULT COUNT 1> +error: at or before token `control': syntax error, unexpected ControlKeyword, expecting \$end +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_220301_CallOperation_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220301_002 verify that the response and exception handling part cannot contain an altstep > + +<COMPILE> + +<MODULE TTCN NegSyn_220301_CallOperation_002 NegSyn_220301_CallOperation_002.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that the response and exception handling part cannot contain an altstep + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// h) The use of else branches and the invocation of altsteps is not allowed. + +module NegSyn_220301_CallOperation_002 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + altstep a_handleReply() runs on GeneralComp { + [] p.getreply {} + } + + testcase TC_NegSyn_220301_CallOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}) { + [] p.getreply(S:{}) { setverdict(pass); } + [] a_handleReply() {} // expected error + } + } + + control { + execute(TC_NegSyn_220301_CallOperation_002(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `\(': syntax error, unexpected '\(', expecting DotCatchOpKeyword or DotGetReplyOpKeyword +<END_RESULT> +<RESULT COUNT 1> +error: at or before token `control': syntax error, unexpected ControlKeyword, expecting \$end +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_001 Ensure that getcall operations are only used on procedure based ports > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_001 NegSem_220302_GetcallOperation_001.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that getcall operations are only used on procedure based ports + ** @verdict pass reject + ***************************************************/ + +module NegSem_220302_GetcallOperation_001 { + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_220302_GetcallOperation_001() runs on GeneralComp { + + connect(self:messagePort, self:messagePort); + + messagePort.send(2); + + alt { + [] messagePort.getcall { //cannot use getcall on a message based port + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_220302_GetcallOperation_001()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Procedure-based operation `getcall' is not applicable to a message-based port of type `@NegSem_220302_GetcallOperation_001.loopbackPort' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_002 Ensure that getcall operation does not allow value assignment > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_002 NegSem_220302_GetcallOperation_002.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that getcall operation does not allow value assignment + ** @verdict pass reject + *****************************************************************/ + +module NegSem_220302_GetcallOperation_002 { + + /** + * @desc testing of inline return template for remote procedure call + * @param p_par1 only input parameter + * @param p_par2 must have value 4 at return + * @param p_par3 must have value 5 at return + * @return must return value 1 + */ + signature p_NegSem_220302_GetcallOperation_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_NegSem_220302_GetcallOperation_002 s_returnTemplate := { + p_par1 := 0, // p_par1 := -, core dump + p_par2 := 4, + p_par3 := 5 + } + + template p_NegSem_220302_GetcallOperation_002 s_wrongTemplate := { + p_par1 := 0, // p_par1 := -, core dump + p_par2 := 2, + p_par3 := 3 + } + + template p_NegSem_220302_GetcallOperation_002 s_callTemplate := { + p_par1 := 1, + p_par2 := 0, // p_par2 := -, core dump + p_par3 := 3 + } + + type port remotePort procedure { + inout p_NegSem_220302_GetcallOperation_002; + } with {extension "internal"} + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + var integer v_zero:=0; + var integer v_one:=1; + + PCO.call(p_NegSem_220302_GetcallOperation_002:s_callTemplate, 5.0) { + + [] PCO.getreply(p_NegSem_220302_GetcallOperation_002:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_NegSem_220302_GetcallOperation_002:s_returnTemplate value 2) { + setverdict(fail); + } + [v_one>v_zero] PCO.getreply(p_NegSem_220302_GetcallOperation_002:s_returnTemplate value 1) { //check that boolean guard is correctly evaluated + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail); + } + } + } + + function f_ServerResponses() runs on GeneralComp { + + var integer v_par1; + var integer v_par3; + var integer v_return; + timer t_timeout:=30.0; + + template p_NegSem_220302_GetcallOperation_002 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_NegSem_220302_GetcallOperation_001:s_acceptTemplate) -> value v_return { + //not allowed assignment + } + [] t_timeout.timeout { + } + } + + } + + + testcase TC_NegSem_220302_GetcallOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + timer t_wait:=1.0; + + + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + t_wait.start; + while(t_wait.running) { + //this gives a chance for server to still test for second getcall match + } + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO, client:PCO); + } + + control{ + execute(TC_NegSem_220302_GetcallOperation_002()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: at or before token `value': syntax error, unexpected ValueKeyword, expecting ParamKeyword or SenderKeyword +<END_RESULT> +<RESULT COUNT 1> +error: at or before token `testcase': syntax error, unexpected TestcaseKeyword, expecting \$end +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_003 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_003 Ensure that getcall for any call does not allow param assignment > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_003 NegSem_220302_GetcallOperation_003.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that getcall for any call does not allow param assignment + ** @verdict pass reject + *****************************************************************/ + +module NegSem_220302_GetcallOperation_003 { + + /** + * @desc testing of inline return template for remote procedure call + * @param p_par1 only input parameter + * @param p_par2 must have value 4 at return + * @param p_par3 must have value 5 at return + * @return must return value 1 + */ + signature p_NegSem_220302_GetcallOperation_003(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_NegSem_220302_GetcallOperation_003 s_returnTemplate := { + p_par1 := 0, // p_par1 := -, core dump + p_par2 := 4, + p_par3 := 5 + } + + template p_NegSem_220302_GetcallOperation_003 s_wrongTemplate := { + p_par1 := 0, // p_par1 := -, core dump + p_par2 := 2, + p_par3 := 3 + } + + template p_NegSem_220302_GetcallOperation_003 s_callTemplate := { + p_par1 := 1, + p_par2 := 0, // p_par2 := -, core dump + p_par3 := 3 + } + + type port remotePort procedure { + inout p_NegSem_220302_GetcallOperation_003; + } with {extension "internal"} + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + var integer v_zero:=0; + var integer v_one:=1; + + PCO.call(p_NegSem_220302_GetcallOperation_003:s_callTemplate, 5.0) { + + [] PCO.getreply(p_NegSem_220302_GetcallOperation_003:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_NegSem_220302_GetcallOperation_003:s_returnTemplate value 2) { + setverdict(fail); + } + [v_one>v_zero] PCO.getreply(p_NegSem_220302_GetcallOperation_003:s_returnTemplate value 1) { //check that boolean guard is correctly evaluated + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail); + } + } + } + + function f_ServerResponses() runs on GeneralComp { + + var integer v_par1; + var integer v_par3; + timer t_timeout:=30.0; + + template p_NegSem_220302_GetcallOperation_003 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall -> param(v_par1, v_par3) { //not allowed param assignment for any call + } + [] t_timeout.timeout { + } + } + + } + + + testcase TC_NegSem_220302_GetcallOperation_003() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + timer t_wait:=1.0; + + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + t_wait.start; + while(t_wait.running) { + //this gives a chance for server to still test for second getcall match + } + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO, client:PCO); + } + + control{ + execute(TC_NegSem_220302_GetcallOperation_003()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Parameter redirect cannot be used without signature template +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_004 Verify that error occurs when any from getcall is applied to single port > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_004 NegSem_220302_GetcallOperation_004.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that error occurs when any from getcall is applied to single port + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction g +// The PortArrayRef shall be a reference to a port array variable identifier. +module NegSem_220302_GetcallOperation_004 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp + { + var integer v_index; + alt + { + [] any from p.getcall { setverdict(pass); } + [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_NegSem_220302_GetcallOperation_004(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Reference to a port array was expected instead of a port +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_005 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_005 Verify that error occurs when any from getcall is applied to 1D array and index target is array > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_005 NegSem_220302_GetcallOperation_005.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that error occurs when any from getcall is applied to 1D array and index target is array + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction i +// If the index redirection is used for single-dimensional port arrays, the type +// of the integer variable shall allow storing the highest index of the respective array. +module NegSem_220302_GetcallOperation_005 { + + signature S(); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + + type component GeneralComp { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + var integer v_index[1]; + alt + { + [] any from p.getcall(S:{}) -> @index value v_index { + if(v_index[0] == 1){ + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + if (i mod 2 > 0) { p[i].call(S:{}, nowait); } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_NegSem_220302_GetcallOperation_005(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Indices of one-dimensional port arrays can only be redirected to an integer +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_006 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_006 Verify that error occurs when any from getcall is applied to 1D array and index target has wrong type > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_006 NegSem_220302_GetcallOperation_006.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that error occurs when any from getcall is applied to 1D array and index target has wrong type + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction i +// If the index redirection is used for single-dimensional port arrays, the type +// of the integer variable shall allow storing the highest index of the respective array. +module NegSem_220302_GetcallOperation_006 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + const integer c_portCount := 4; + + type component GeneralComp { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + var float v_index; + alt + { + [] any from p.getcall(S:{}) -> @index value v_index { + if(v_index == 1.0){ + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + if (i mod 2 > 0) { p[i].call(S:{}, nowait); } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_NegSem_220302_GetcallOperation_006(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Indices of port arrays can only be redirected to an integer, an integer array or a record of integers +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_007 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_007 Verify that any from getcall index redirection for multi-D arrays requires arrays of correct size > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_007 NegSem_220302_GetcallOperation_007.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from getcall index redirection for multi-D arrays requires arrays of correct size + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction j: +// If the index redirection is used for multi-dimensional component arrays, the size +// of the integer array or record of integer type shall exactly be the same as the dimension +// of the respective array, and its type shall allow storing the highest index (from all +// dimensions) of the array. +module NegSem_220302_GetcallOperation_007 { + + signature S(integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} + + const integer c_portCount := 3; + type component GeneralComp { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + var integer v_index[1], v_parValue; + var GeneralComp v_src; + alt + { + [] any from p.getcall(S:{p_par := (0..c_portCount)}) -> sender v_src @index value v_index { + if(v_index[0] == 1 and v_index[1] == 2 and v_parValue == v_index[0] + 1){ + setverdict(pass); + } else { + setverdict(fail, "Indices or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } + } + } + + + testcase TC_NegSem_220302_GetcallOperation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + connect(self:p[i][j], v_ptc:p[i][j]); + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].call(S:{ p_par := i + 1 }, nowait); } + } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_NegSem_220302_GetcallOperation_007(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Size of integer array is invalid: the port array has 2 dimensions, but the integer array has 1 element +<END_RESULT> +<RESULT COUNT 1> +error: Array index overflow: the index value must be at most `0' instead of `1' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_008 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_008 Verify that any from getcall index redirection for multi-D arrays requires arrays > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_008 NegSem_220302_GetcallOperation_008.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from getcall index redirection for multi-D arrays requires arrays + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction j: +// If the index redirection is used for multi-dimensional component arrays, the size +// of the integer array or record of integer type shall exactly be the same as the dimension +// of the respective array, and its type shall allow storing the highest index (from all +// dimensions) of the array. +module NegSem_220302_GetcallOperation_008 { + + signature S(integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} + + const integer c_portCount := 3; + type component GeneralComp { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + var integer v_index, v_parValue; + var GeneralComp v_src; + alt + { + [] any from p.getcall(S:{p_par := (0..c_portCount)}) -> param (v_parValue := p_par) sender v_src @index value v_index { + if(v_index == 1 and v_parValue == v_index + 1){ + setverdict(pass); + } else { + setverdict(fail, "Indices or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + connect(self:p[i][j], v_ptc:p[i][j]); + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].call(S:{ p_par := i + 1 }, nowait); } + } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_NegSem_220302_GetcallOperation_008(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Indices of multi-dimensional port arrays can only be redirected to an integer array or a record of integers +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_009 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_009 null component in the from clause of the getcall operation > + +<COMPILE> +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_220302_GetcallOperation_009 NegSem_220302_GetcallOperation_009.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, null component in the from clause of the getcall operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. + +module NegSem_220302_GetcallOperation_009 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp + { + var GeneralComp v_compRef := null; + connect(self:p, v_compRef:p); + + alt { + [] p.getcall(S:{}) from v_compRef { setverdict(pass, "first branch");} // error expected + [] p.getcall(S:{}) { setverdict(fail, "second branch"); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_009(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +Dynamic test case error: The second argument of connect operation contains the null component reference. +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_011 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_011 applying @decoded to a forbidden field > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_011 NegSem_220302_GetcallOperation_011.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, applying @decoded to a forbidden field + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a message, encoded payload fields can be +// decoded prior to assignment using the @decoded modifier. In this case, the +// referenced field on the right hand sided of the assignment shall be one of the +// bitstring, hexstring, octetstring, charstring or universal charstring types. It +// shall be decoded into a value of the same type as the variable on the left hand +// side of the assignment. + +module NegSem_220302_GetcallOperation_011 { + type record of integer RoI (0..255); + + signature S(RoI p_par); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res; + alt { + [] p.getcall(S: {p_par := ?} ) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := { 0, 0, 0, 0 } }, nowait); + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_011(), 5.0); + } +} with {encode "RAW"} +<END_MODULE> + +<RESULT COUNT> +error: The '@decoded' modifier is only available to parameter redirects of string types. +<END_RESULT> + +<END_TC> +:exmp + + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_012 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_012 decoding error in @decoded redirect assignment > + +<COMPILE> +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_220302_GetcallOperation_012 NegSem_220302_GetcallOperation_012.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, decoding error in @decoded redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Failure of this decoding shall cause a test case error. + +module NegSem_220302_GetcallOperation_012 { + signature S(charstring p_par); + + type integer I with { variant "32 bit"}; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var I v_res; + alt { + [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_012() runs on GeneralComp system GeneralComp { + var I v_src := 1953719668; + var charstring v_str := oct2char(bit2oct(encvalue(v_src))) & "abcdefgij"; + + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + + p.call(S:{ p_par := v_str }, nowait); + + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_012(), 5.0); + } +} with { encode "RAW"} +<END_MODULE> + +<RESULT COUNT> +Dynamic test case error: Parameter redirect \(for parameter 'p__par'\) failed, because the buffer was not empty after decoding. Remaining octets: 9. +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_013 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_013 invalid format value in @decoded redirect assignment > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_013 NegSem_220302_GetcallOperation_013.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, invalid format value in @decoded redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220302_GetcallOperation_013 { + signature S(universal charstring p_par); + + type integer I with { variant "32 bit"}; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var I v_res; + alt { + [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded("proprietary") p_par) { + setverdict(pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_013() runs on GeneralComp system GeneralComp { + var I v_src := 1953719668; + var universal charstring v_str := encvalue_unichar(v_src); + + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + + p.call(S:{ p_par := v_str }, nowait); + v_ptc.done; + + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_013(), 5.0); + } +} with { encode "RAW"} +<END_MODULE> + +<RESULT COUNT > +error: 'proprietary' is not a valid encoding format +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_014 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_014 value of wrong type in @decoded redirect assignment > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_014 NegSem_220302_GetcallOperation_014.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, value of wrong type in @decoded redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220302_GetcallOperation_014 { + signature S(universal charstring p_par); + + type integer I with { variant "32 bit"}; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var I v_res, v_enc := 32; + alt { + [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded(v_enc) p_par) { + setverdict (pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_014() runs on GeneralComp system GeneralComp { + var I v_src := 1953719668; + var universal charstring v_str := encvalue_unichar(v_src); + + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + + p.call(S:{ p_par := v_str }, nowait); + v_ptc.done; + + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_014(), 5.0); + } +} with { encode "RAW"} +<END_MODULE> + +<RESULT COUNT > +error: Type mismatch: a value of type `charstring' was expected instead of `integer' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_015 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_015 encoding parameter of @decoded redirect assignment applied to incorrect type > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_015 NegSem_220302_GetcallOperation_015.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, encoding parameter of @decoded redirect assignment applied to incorrect type + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// In case the referenced field is not a universal charstring, the optional +// parameter shall not be present. + +module NegSem_220302_GetcallOperation_015 { + signature S(octetstring p_par); + + type charstring CS with { variant ""}; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var CS v_res; + alt { + [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded("UTF-8") p_par) { + setverdict(pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_GetcallOperation_015() runs on GeneralComp system GeneralComp { + var CS v_src := "abc"; + var octetstring v_os := bit2oct(encvalue(v_src)); + + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + + p.call(S:{ p_par := v_os }, nowait); + v_ptc.done; + + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_015(), 5.0); + } +} with { encode "RAW"} +<END_MODULE> + +<RESULT COUNT > +error: The encoding formal parameter for the '@decoded' modifier is only available to parameter redirects of universal charstrings +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220302_GetcallOperation_016 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_016 incompatible from and sender clause in getcall operation > + +<COMPILE> + +<MODULE TTCN NegSem_220302_GetcallOperation_016 NegSem_220302_GetcallOperation_016.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, incompatible from and sender clause in getcall operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the getcall operation contains both from and sender clause, the variable or parameter +// referenced in the sender clause shall be type compatible with the template in the from +// clause. + +module NegSem_220302_GetcallOperation_016 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + var integer vc_int; + port P p; + } + + type component AltComp { + var charstring vc_str; + port P px; + } + + function f() runs on GeneralComp { + var GeneralComp v_compRef := null; + alt { + [] p.getcall(S:{}) from AltComp:? -> sender v_compRef { } // error expected + [] p.getcall(S:{}) { } + } + setverdict (pass); + } + + testcase TC_NegSem_220302_GetcallOperation_016() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_016(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: The types in `from' clause and `sender' redirect are not the same: `@NegSem_220302_GetcallOperation_016.AltComp' was expected instead of `@NegSem_220302_GetcallOperation_016.GeneralComp' +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSyn_220302_GetcallOperation_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220302_001 Verify that error occurs when using index redirection in port.getcall operation > + +<COMPILE> + +<MODULE TTCN NegSyn_220302_GetcallOperation_001 NegSyn_220302_GetcallOperation_001.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that error occurs when using index redirection in port.getcall operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction h +// The index redirection shall only be used when the operation is used on an any from +// port array construct. +module NegSyn_220302_GetcallOperation_001 { + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + var integer v_index; + alt + { + [] p.getcall -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } + } + } + + testcase TC_NegSyn_220302_GetcallOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_NegSyn_220302_GetcallOperation_001(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: Index redirect cannot be used without the 'any from' clause +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220303_ReplyOperation_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220303_001 Ensure that reply operations are only used on procedure based ports > + +<COMPILE> + +<MODULE TTCN NegSem_220303_ReplyOperation_001 NegSem_220303_ReplyOperation_001.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.3, Ensure that reply operations are only used on procedure based ports + ** @verdict pass reject + ***************************************************/ + +module NegSem_220303_ReplyOperation_001 { + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_220303_ReplyOperation_001() runs on GeneralComp { + + connect(self:messagePort, self:messagePort); + + messagePort.send(2); + + alt { + [] messagePort.receive(2) { + messagePort.reply(3); //cannot use reply on a message based port + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_001()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: Procedure-based operation `reply' is not applicable to a message-based port of type `@NegSem_220303_ReplyOperation_001.loopbackPort' +<END_RESULT> +<RESULT COUNT 1> +error: The type of parameter is `integer', which is not a signature +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220303_ReplyOperation_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220303_002 null component in the to clause of the reply operation > + +<COMPILE> +<EXECUTE_PARALLEL> + +<MODULE TTCN NegSem_220303_ReplyOperation_002 NegSem_220303_ReplyOperation_002.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.3, null component in the to clause of the reply operation + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. + +module NegSem_220303_ReplyOperation_002 { + + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var GeneralComp v_compRef := null; + connect(self:p, v_compRef:p); + p.getcall(S:{}); + p.reply(S:{}) to v_compRef; + } + + testcase TC_NegSem_220303_ReplyOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); connect(self:p, v_ptc:p); v_ptc.start(f_server()); + p.call(S:{}, 1.0) { + [] p.getreply(S:{}) { } + [] p.catch(timeout) { } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_002(), 5.0); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +Dynamic test case error: The second argument of connect operation contains the null component reference. +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_220303_ReplyOperation_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220303_004 null component in the to clause of the reply operation > - p.call(S:{ p_par := v_str }, nowait); - v_ptc.done; +<COMPILE> + +<MODULE TTCN NegSem_220303_ReplyOperation_004 NegSem_220303_ReplyOperation_004.ttcn > +/*************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that reply operation cannot be used on a message port + ** @verdict pass reject + ***************************************************/ +// The following requirements are tested: +// a) A reply operation shall only be used at a procedure-based port. + +module NegSem_220303_ReplyOperation_004 { + + signature S() return integer; + + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220303_ReplyOperation_004() runs on GeneralComp { + p.reply(S:{} value 1); setverdict(pass); } - control { - execute(TC_NegSem_220302_GetcallOperation_013(), 5.0); + control{ + execute(TC_NegSem_220303_ReplyOperation_004(), 5.0); } -} with { encode "RAW"} + +} <END_MODULE> -<RESULT COUNT > -error: 'proprietary' is not a valid encoding format +<RESULT COUNT 1> +error: Procedure-based operation `reply' is not applicable to a message-based port of type `@NegSem_220303_ReplyOperation_004.P' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_014 negative test +:h3. NegSem_220303_ReplyOperation_005 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_014 value of wrong type in @decoded redirect assignment > +<TC - 220303_005 verify that signature not listed in the port definition cannot be used in the reply operation > <COMPILE> -<MODULE TTCN NegSem_220302_GetcallOperation_014 NegSem_220302_GetcallOperation_014.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220303_ReplyOperation_005 NegSem_220303_ReplyOperation_005.ttcn > +/*************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, value of wrong type in @decoded redirect assignment + ** @purpose 1:22.3.3, verify that signature not listed in the port definition cannot be used in the reply operation ** @verdict pass reject - *****************************************************************/ + ***************************************************/ // The following requirements are tested: -// Any other value shall cause an error. +// The type definition of the port shall include the name of the procedure +// to which the reply operation belongs. -module NegSem_220302_GetcallOperation_014 { - signature S(universal charstring p_par); +module NegSem_220303_ReplyOperation_005 { + + signature S(); + signature SNotListed(); + + type port P procedure { + inout S; + } with {extension "internal"} - type integer I with { variant "32 bit"}; - - type port P procedure { - inout S; - } with {extension "internal"} - type component GeneralComp { - port P p; - } - - function f_server() runs on GeneralComp { - var I v_res, v_enc := 32; - alt { - [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded(v_enc) p_par) { - setverdict (pass); - } - [] p.getcall { setverdict(pass); } - } + port P p; } - - testcase TC_NegSem_220302_GetcallOperation_014() runs on GeneralComp system GeneralComp { - var I v_src := 1953719668; - var universal charstring v_str := encvalue_unichar(v_src); - var GeneralComp v_ptc := GeneralComp.create("PTC"); + function f_server() runs on GeneralComp { + p.getcall; + p.reply(SNotListed:{}); + } + + testcase TC_NegSem_220303_ReplyOperation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); connect(self:p, v_ptc:p); v_ptc.start(f_server()); - - p.call(S:{ p_par := v_str }, nowait); - v_ptc.done; - + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } setverdict(pass); } - control { - execute(TC_NegSem_220302_GetcallOperation_014(), 5.0); + control{ + execute(TC_NegSem_220303_ReplyOperation_005(), 5.0); } -} with { encode "RAW"} + +} <END_MODULE> -<RESULT COUNT > -error: Type mismatch: a value of type `charstring' was expected instead of `integer' +<RESULT COUNT 1> +error: Incompatible explicit type specification: `@NegSem_220303_ReplyOperation_005.S' was expected instead of `@NegSem_220303_ReplyOperation_005.SNotListed' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_015 negative test +:h3. NegSem_220303_ReplyOperation_006 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_015 encoding parameter of @decoded redirect assignment applied to incorrect type > +<TC - 220303_006 verify that matching symbols cannot be used in out signature parameters in reply operations > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_015 NegSem_220302_GetcallOperation_015.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220303_ReplyOperation_006 NegSem_220303_ReplyOperation_006.ttcn > +/*************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, encoding parameter of @decoded redirect assignment applied to incorrect type + ** @purpose 1:22.3.3, verify that matching symbols cannot be used in out signature parameters in reply operations ** @verdict pass reject - *****************************************************************/ + ***************************************************/ // The following requirements are tested: -// In case the referenced field is not a universal charstring, the optional -// parameter shall not be present. +// b) All out and inout parameters of the signature shall have a specific value i.e. +// the use of matching mechanisms such as AnyValue is not allowed. -module NegSem_220302_GetcallOperation_015 { - signature S(octetstring p_par); +module NegSem_220303_ReplyOperation_006 { - type charstring CS with { variant ""}; - - type port P procedure { - inout S; - } with {extension "internal"} + type record R { + integer field1, + integer field2 + } + signature S(out R par1); + + type port P procedure { + inout S; + } with {extension "internal"} + type component GeneralComp { - port P p; - } - - function f_server() runs on GeneralComp { - var CS v_res; - alt { - [] p.getcall(S:{ p_par := ?}) -> param (v_res := @decoded("UTF-8") p_par) { - setverdict(pass); - } - [] p.getcall { setverdict(pass); } - } + port P p; } - - testcase TC_NegSem_220302_GetcallOperation_015() runs on GeneralComp system GeneralComp { - var CS v_src := "abc"; - var octetstring v_os := bit2oct(encvalue(v_src)); + function f_server() runs on GeneralComp { + var template R v_rec := { field1 := 0, field2 := ? }; + p.getcall(S:{-}); + p.reply(S:{par1 := v_rec}); + } + + testcase TC_NegSem_220303_ReplyOperation_006() runs on GeneralComp system GeneralComp { var GeneralComp v_ptc := GeneralComp.create("PTC"); connect(self:p, v_ptc:p); v_ptc.start(f_server()); - - p.call(S:{ p_par := v_os }, nowait); - v_ptc.done; - + p.call(S:{-}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } setverdict(pass); } - control { - execute(TC_NegSem_220302_GetcallOperation_015(), 5.0); + control{ + execute(TC_NegSem_220303_ReplyOperation_006(), 5.0); } -} with { encode "RAW"} + +} <END_MODULE> -<RESULT COUNT > -error: The encoding formal parameter for the '@decoded' modifier is only available to parameter redirects of universal charstrings +<RESULT COUNT 1> +Dynamic test case error: Performing a valueof or send operation on a non-specific integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220302_GetcallOperation_016 negative test +:h3. NegSem_220303_ReplyOperation_007 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_016 incompatible from and sender clause in getcall operation > +<TC - 220303_007 verify that matching symbols cannot be used in inout signature parameters in reply operations > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220302_GetcallOperation_016 NegSem_220302_GetcallOperation_016.ttcn > -/***************************************************************** +<MODULE TTCN NegSem_220303_ReplyOperation_007 NegSem_220303_ReplyOperation_007.ttcn > +/*************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, incompatible from and sender clause in getcall operation + ** @purpose 1:22.3.3, verify that matching symbols cannot be used in inout signature parameters in reply operations ** @verdict pass reject - *****************************************************************/ + ***************************************************/ // The following requirements are tested: -// If the getcall operation contains both from and sender clause, the variable or parameter -// referenced in the sender clause shall be type compatible with the template in the from -// clause. +// b) All out and inout parameters of the signature shall have a specific value i.e. +// the use of matching mechanisms such as AnyValue is not allowed. -module NegSem_220302_GetcallOperation_016 { +module NegSem_220303_ReplyOperation_007 { - signature S(); - - type port P procedure { - inout S; - } with {extension "internal"} + type record R { + integer field1, + integer field2 + } + signature S(inout R par1); + + type port P procedure { + inout S; + } with {extension "internal"} + type component GeneralComp { - var integer vc_int; - port P p; - } + port P p; + } + + function f_server() runs on GeneralComp { + var template R v_rec := { field1 := 0, field2 := ? } + p.getcall(S:{par1 := {field1 := 0, field2 := 5}}); + p.reply(S:{par1 := v_rec}); + } - type component AltComp { - var charstring vc_str; - port P px; - } - - function f() runs on GeneralComp { - var GeneralComp v_compRef := null; + testcase TC_NegSem_220303_ReplyOperation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{par1 := {field1 := 0, field2 := 5} }, nowait); alt { - [] p.getcall(S:{}) from AltComp:? -> sender v_compRef { } // error expected - [] p.getcall(S:{}) { } - } - setverdict (pass); - } - - testcase TC_NegSem_220302_GetcallOperation_016() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create; - connect(self:p, v_ptc:p); - p.call(S:{}, nowait); - v_ptc.start(f()); - v_ptc.done; + [] p.getreply {} + [] v_ptc.done {} + } setverdict(pass); } - control { - execute(TC_NegSem_220302_GetcallOperation_016(), 5.0); + control{ + execute(TC_NegSem_220303_ReplyOperation_007(), 5.0); } + } <END_MODULE> <RESULT COUNT 1> -error: The types in `from' clause and `sender' redirect are not the same: `@NegSem_220302_GetcallOperation_016.AltComp' was expected instead of `@NegSem_220302_GetcallOperation_016.GeneralComp' +Dynamic test case error: Performing a valueof or send operation on a non-specific integer template. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSyn_220302_GetcallOperation_001 negative test +:h3. NegSem_220303_ReplyOperation_008 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220302_001 Verify that error occurs when using index redirection in port.getcall operation > +<TC - 220303_008 verify that error is issued for a missing to clause in a reply operation in case of one-to-many connections > <COMPILE> +<EXECUTE_PARALLEL> -<MODULE TTCN NegSyn_220302_GetcallOperation_001 NegSyn_220302_GetcallOperation_001.ttcn > -/****************************************************************************** +<MODULE TTCN NegSem_220303_ReplyOperation_008 NegSem_220303_ReplyOperation_008.ttcn > +/*************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.2, Verify that error occurs when using index redirection in port.getcall operation + ** @purpose 1:22.3.3, verify that error is issued for a missing to clause in a reply operation in case of one-to-many connections ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// Restriction h -// The index redirection shall only be used when the operation is used on an any from -// port array construct. -module NegSyn_220302_GetcallOperation_001 { - signature S(); - - type port P procedure { - inout S; - } with {extension "internal"} +// c) A to clause shall be present in case of one-to-many connections. + +module NegSem_220303_ReplyOperation_008 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ClientQuery() runs on GeneralComp { - type component GeneralComp - { - port P p; - } + p.call(S:{}, 1.0) { - function f() runs on GeneralComp - { - var integer v_index; - alt - { - [] p.getcall -> @index value v_index { setverdict(pass); } - [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } - } - } + [] p.getreply(S:{}) { + } + [] p.catch (timeout) { + } + } + setverdict(pass); + } + + function f_ServerResponses() runs on GeneralComp { + var GeneralComp v_client1 := null, v_client2 := null; - testcase TC_NegSyn_220302_GetcallOperation_001() runs on GeneralComp system GeneralComp { - var GeneralComp v_ptc := GeneralComp.create; - connect(self:p, v_ptc:p); - p.call(S:{}, nowait); - v_ptc.start(f()); - v_ptc.done; + alt { + [v_client1 == null] p.getcall(S:{}) -> sender v_client1 { + if (v_client2 == null) { repeat; } + } + [v_client2 == null] p.getcall(S:{}) -> sender v_client2 { + if (v_client1 == null) { repeat; } + } + } + p.reply(S:{}); // to clause missing, but there are 2 clients! + setverdict(pass); } + + testcase TC_NegSem_220303_ReplyOperation_008() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + var GeneralComp client2 := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:p, client:p); + connect(server:p, client2:p); + + server.start(f_ServerResponses()); + + client2.start(f_ClientQuery()); + client.start(f_ClientQuery()); - control { - execute(TC_NegSyn_220302_GetcallOperation_001(), 5.0); + interleave { + [] client.done {} + [] client2.done {} + } + server.stop; + + alt { + [] all component.done {} + } + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_008()); } + } <END_MODULE> <RESULT COUNT 1> -error: Index redirect cannot be used without the 'any from' clause +Dynamic test case error: Port p has more than one active connections. Message can be sent on it only with explicit addressing. <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220303_ReplyOperation_001 negative test +:h3. NegSem_220303_ReplyOperation_009 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220303_001 Ensure that reply operations are only used on procedure based ports > +<TC - 220303_009 verify that error is issued for a missing to clause in a reply operation in case of one-to-many connections > <COMPILE> -<MODULE TTCN NegSem_220303_ReplyOperation_001 NegSem_220303_ReplyOperation_001.ttcn > +<MODULE TTCN NegSem_220303_ReplyOperation_009 NegSem_220303_ReplyOperation_009.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.3, Ensure that reply operations are only used on procedure based ports + ** @purpose 1:22.3.3, verify that values that are not addresses or components cannot be used in the to clause of the reply operation ** @verdict pass reject ***************************************************/ -module NegSem_220303_ReplyOperation_001 { - - type port loopbackPort message { - inout integer - } with {extension "internal"} - +// The following requirements are tested: +// d) All AddressRef items in the to clause shall be of type address, component or of the address +// type bound to the port type (see clause 6.2.9) of the port instance referenced in the reply +// operation. - type component GeneralComp { - port loopbackPort messagePort - } +module NegSem_220303_ReplyOperation_009 { - testcase TC_NegSem_220303_ReplyOperation_001() runs on GeneralComp { + signature S(); - connect(self:messagePort, self:messagePort); + type port P procedure { + inout S; + } with {extension "internal"} - messagePort.send(2); + type component GeneralComp { + port P p; + } - alt { - [] messagePort.receive(2) { - messagePort.reply(3); //cannot use reply on a message based port - setverdict(pass); - } - [] messagePort.receive { - setverdict(fail); - } - } - } + function f_server() runs on GeneralComp { + var integer v_addr := 10; + p.getcall(S:{}); + p.reply(S:{}) to v_addr; + } + + testcase TC_NegSem_220303_ReplyOperation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } - control{ - execute(TC_NegSem_220303_ReplyOperation_001()); - } + control{ + execute(TC_NegSem_220303_ReplyOperation_009(), 5.0); + } } <END_MODULE> <RESULT COUNT 1> -error: Procedure-based operation `reply' is not applicable to a message-based port of type `@NegSem_220303_ReplyOperation_001.loopbackPort' -<END_RESULT> -<RESULT COUNT 1> -error: The type of parameter is `integer', which is not a signature +error: Type mismatch: The type of the operand should be a component type instead of `integer' <END_RESULT> <END_TC> :exmp *---------------------------------------------------------------------* -:h3. NegSem_220303_ReplyOperation_002 negative test +:h3. NegSem_220303_ReplyOperation_010 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - 220303_002 null component in the to clause of the reply operation > +<TC - 220303_010 verify that reply operation on a disconnected port causes an error > <COMPILE> <EXECUTE_PARALLEL> -<MODULE TTCN NegSem_220303_ReplyOperation_002 NegSem_220303_ReplyOperation_002.ttcn > +<MODULE TTCN NegSem_220303_ReplyOperation_010 NegSem_220303_ReplyOperation_010.ttcn > /*************************************************** ** @version 0.0.1 - ** @purpose 1:22.3.3, null component in the to clause of the reply operation + ** @purpose 1:22.3.3, verify that reply operation on a disconnected port causes an error ** @verdict pass reject ***************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. - -module NegSem_220303_ReplyOperation_002 { +// f) Applying a reply operation to an unmapped or disconnected port shall cause a test +// case error. +module NegSem_220303_ReplyOperation_010 { signature S(); @@ -4641,32 +6095,32 @@ module NegSem_220303_ReplyOperation_002 { } function f_server() runs on GeneralComp { - var GeneralComp v_compRef := null; - connect(self:p, v_compRef:p); p.getcall(S:{}); - p.reply(S:{}) to v_compRef; + disconnect(self:p, mtc:p); + p.reply(S:{}); } - testcase TC_NegSem_220303_ReplyOperation_002() runs on GeneralComp system GeneralComp { + testcase TC_NegSem_220303_ReplyOperation_010() runs on GeneralComp system GeneralComp { var GeneralComp v_ptc := GeneralComp.create("PTC"); connect(self:p, v_ptc:p); v_ptc.start(f_server()); - p.call(S:{}, 1.0) { - [] p.getreply(S:{}) { } - [] p.catch(timeout) { } - } + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } setverdict(pass); } control{ - execute(TC_NegSem_220303_ReplyOperation_002(), 5.0); + execute(TC_NegSem_220303_ReplyOperation_010(), 5.0); } } <END_MODULE> <RESULT COUNT 1> -Dynamic test case error: The second argument of connect operation contains the null component reference. +Dynamic test case error: Port p has neither connections nor mappings. Message cannot be sent on it. <END_RESULT> <END_TC> @@ -5085,7 +6539,8 @@ error: Indices of multi-dimensional port arrays can only be redirected to an int *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220304_getreply_operation_006 { @@ -5151,7 +6606,8 @@ Dynamic test case error: The second argument of connect operation contains the n *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220304_getreply_operation_007 { @@ -5979,6 +7435,70 @@ error: The encoding format parameter for the '@decoded' modifier is only availab <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_220304_getreply_operation_021 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220304_021 incompatible template in the from clause of the getreply operation > + +<COMPILE> + +<MODULE TTCN NegSem_220304_getreply_operation_021 NegSem_220304_getreply_operation_021.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.4, incompatible template in the from clause of the getreply operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) All AddressRef items in the from clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type (see +// section 6.2.9) of the port instance referenced in the getcall operation. + +module NegSem_220304_getreply_operation_021 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{} value 1); + } + + testcase TC_NegSem_220304_getreply_operation_021() runs on GeneralComp system GeneralComp { + var charstring v_addr := "addr"; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}) { + [] p.getreply(S:{}) from v_addr {} // error expected + [] p.getreply {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_021(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT > +error: The type of the template should be a component type instead of `charstring' +<END_RESULT> + +<END_TC> +:exmp + + *---------------------------------------------------------------------* :h3. NegSyn_220304_getreply_operation_001 negative test .*---------------------------------------------------------------------* @@ -6061,10 +7581,10 @@ error: Index redirect cannot be used without the 'any from' clause // The following requirements are tested: // Exceptions are specified as types. Therefore the exception value may either be derived -// from a template or be the value resulting from an expression (which of course can be -// an explicit value). The optional type field in the value specification to the raise -// operation shall be used in cases where it is necessary to avoid any ambiguity of the type -// of the value being sent. +// from a template conforming to the template(value) restriction or be the value resulting +// from an expression (which of course can be an explicit value). The optional type field in +// the value specification to the raise operation shall be used in cases where it is necessary +// to avoid any ambiguity of the type of the value being sent. module NegSem_220305_raise_operation_001 { signature S() exception(charstring, octetstring); @@ -6125,10 +7645,10 @@ error: Type `integer' is not present on the exception list of signature `@NegSem // The following requirements are tested: // Exceptions are specified as types. Therefore the exception value may either be derived -// from a template or be the value resulting from an expression (which of course can be -// an explicit value). The optional type field in the value specification to the raise -// operation shall be used in cases where it is necessary to avoid any ambiguity of the type -// of the value being sent. +// from a template conforming to the template(value) restriction or be the value resulting +// from an expression (which of course can be an explicit value). The optional type field in +// the value specification to the raise operation shall be used in cases where it is necessary +// to avoid any ambiguity of the type of the value being sent. module NegSem_220305_raise_operation_002 { signature S(); @@ -6189,10 +7709,10 @@ error: Signature `@NegSem_220305_raise_operation_002.S' does not have exceptions // The following requirements are tested: // Exceptions are specified as types. Therefore the exception value may either be derived -// from a template or be the value resulting from an expression (which of course can be -// an explicit value). The optional type field in the value specification to the raise -// operation shall be used in cases where it is necessary to avoid any ambiguity of the type -// of the value being sent. +// from a template conforming to the template(value) restriction or be the value resulting +// from an expression (which of course can be an explicit value). The optional type field in +// the value specification to the raise operation shall be used in cases where it is necessary +// to avoid any ambiguity of the type of the value being sent. module NegSem_220305_raise_operation_003 { type integer MyInt1 (1..10); @@ -6446,9 +7966,11 @@ error: Signature `@NegSem_220305_raise_operation_006.S2' is not present on the i ** @purpose 1:22.3.5, value of incorrect type in the to clause of the raise operation ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// AddressRef shall be of type address, component or of the type provided in the address -// declaration of the port type of the port instance referenced in the raise operation. +// All AddressRef items in the to clause shall be of type address, component or of the +// address type bound to the port type (see clause 6.2.9) of the port instance referenced +// in the raise operation. module NegSem_220305_raise_operation_007 { signature S() exception(integer); @@ -6509,8 +8031,10 @@ error: A component reference was expected as operand ** @purpose 1:22.3.5, null in the to clause of the raise operation ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220305_raise_operation_008 { signature S() exception(integer); @@ -6617,6 +8141,63 @@ Dynamic test case error: Port p has neither connections nor mappings. Message ca <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_220305_raise_operation_010 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220305_010 raise operation on disconnected and unmapped ports > + +<COMPILE> + +<MODULE TTCN NegSem_220305_raise_operation_010 NegSem_220305_raise_operation_010.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.5, exception template not conforming to template(value) restriction + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) The TemplateInstance shall conform to the template(value) restriction (see clause 15.8). + +module NegSem_220305_raise_operation_010 { + signature S() exception(charstring, octetstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.raise(S, charstring:?); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}, nowait); // no processing of the exception to avoid possible errors in the catch operation + v_ptc.done; + } + + control { + execute(TC_NegSem_220305_raise_operation_010(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> +error: A specific value was expected instead of any value +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_220306_catch_operation_001 negative test .*---------------------------------------------------------------------* @@ -7029,7 +8610,8 @@ error: Indices of multi-dimensional port arrays can only be redirected to an int *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220306_catch_operation_006 { @@ -7094,7 +8676,8 @@ Dynamic test case error: The second argument of connect operation contains the n *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220306_catch_operation_007 { @@ -7576,6 +9159,71 @@ error: The types in `from' clause and `sender' redirect are not the same: `@NegS <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_220306_catch_operation_015 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - 220306_015 incompatible template in the from clause of the catch operation > + +<COMPILE> + +<MODULE TTCN NegSem_220306_catch_operation_015 NegSem_220306_catch_operation_015.ttcn > +/***************************************************************** + ** @version 0.0.1 + ** @purpose 1:22.3.6, incompatible template in the from clause of the catch operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) All AddressRef items in the from clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type (see +// clause 6.2.9) of the port instance referenced in the catch operation. + +module NegSem_220306_catch_operation_015 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + testcase TC_NegSem_220306_catch_operation_015() runs on GeneralComp system GeneralComp { + var charstring v_addr := "addr"; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}) { + [] p.catch(S, charstring:?) from v_addr {} // error expected + [] p.catch {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220306_catch_operation_015(), 5.0); + } +} +<END_MODULE> + +<RESULT COUNT 1> + error: The type of the template should be a component type instead of `charstring' +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSyn_220306_catch_operation_001 negative test .*---------------------------------------------------------------------* diff --git a/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script b/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script index 078ec0ac1..9d255b4d3 100644 --- a/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script +++ b/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script @@ -4281,6 +4281,280 @@ error: `omit' value is not allowed in this context <END_TC> :exmp +*---------------------------------------------------------------------* +:h3. NegSem_B010201_value_list_001 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - B010201_001 Ensure that the IUT correctly handles template matching with all from clause > + +<COMPILE> + +<MODULE TTCN NegSem_B010201_value_list_001 NegSem_B010201_value_list_001.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +//The type of the template list and the member type of the template in the all from clause shall be compatible. +// Restriction B + +module NegSem_B010201_value_list_001 { + + type set of integer SoI; + + template SoI m_SoI := {1,2,3,4}; + template float mw_SoI := (all from m_SoI); //error: m_SoI is integer, mw_SoI is float + + type port loopbackPort message { + inout float + } with {extension "internal"} + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_001() runs on GeneralComp { + + var float v_testMessage := 2.0; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_001()); + } + +} +<END_MODULE> + +<RESULT COUNT 4> +error: float value was expected +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_B010201_value_list_002 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - B010201_002 Ensure that the IUT correctly handles template matching with all from clause > + +<COMPILE> + +<MODULE TTCN NegSem_B010201_value_list_002 NegSem_B010201_value_list_002.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction D,E: Individual members of the template in the all from clause shall not resolve to any of the following matching mechanisms: AnyElementsOrNone, permutation. + +module NegSem_B010201_value_list_002 { + + type set of integer SoI; + + template SoI m_SoI := {1,*,4}; + template integer mw_SoI := (all from m_SoI); //error: m_SoI contains AnyElementsOrNone + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_002() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_002()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: 'all from' can not refer to permutation or AnyElementsOrNone +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_B010201_value_list_003 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - B010201_003 Ensure that the IUT correctly handles template matching with all from clause > + +<COMPILE> + +<MODULE TTCN NegSem_B010201_value_list_003 NegSem_B010201_value_list_003.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction D,E: Individual members of the template in the all from clause shall not resolve to any of the following matching mechanisms: AnyElementsOrNone, permutation. + +module NegSem_B010201_value_list_003 { + + type record of integer RoI; + + template RoI m_RoI := {permutation(0,1,3,*),2}; + template integer mw_RoI := (all from m_RoI); //error: m_RoI contains permutation + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_003() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_RoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_003()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: 'all from' can not refer to permutation or AnyElementsOrNone +<END_RESULT> + +<END_TC> +:exmp + +*---------------------------------------------------------------------* +:h3. NegSem_B010201_value_list_004 negative test +.*---------------------------------------------------------------------* +:xmp tab=0. + +<TC - B010201_004 Ensure that the IUT correctly handles template matching with all from clause > + +<COMPILE> + +<MODULE TTCN NegSem_B010201_value_list_004 NegSem_B010201_value_list_004.ttcn > +/****************************************************************************** + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template list corretly + ** @verdict pass accept reject + ***************************************************/ + +// The following requirements are tested: +// e) Templates in the template list shall obey the template (present) restriction + +module NegSem_B010201_value_list_004 { + + type record MessageType { + integer field1, + charstring field2 + } + + template integer t_omit := omit; + + template MessageType t_mes := { + field1 := (1, 2, t_omit), // present restriction does not allow omit + field2 := ("abc", "bc") + } + + type port loopbackPort message { + inout MessageType + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_004() runs on GeneralComp { + + var MessageType v_testMessage := { + field1:= 1, + field2:= "abc" + } + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(t_mes) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_004()); + } + +} +<END_MODULE> + +<RESULT COUNT 1> +error: `omit' value is not allowed in this context +<END_RESULT> + +<END_TC> +:exmp + *---------------------------------------------------------------------* :h3. NegSem_B010204_any_value_or_none_001 negative test .*---------------------------------------------------------------------* @@ -6228,22 +6502,22 @@ error: permutation match cannot be used for type `integer' :exmp *---------------------------------------------------------------------* -:h3. NegSem_B010401_length_restrictions_002 negative test +:h3. NegSem_B010401_length_restrictions_001 negative test .*---------------------------------------------------------------------* :xmp tab=0. -<TC - B010401_002 Ensure that the IUT correctly handles template matching of value length definitions > +<TC - B010401_001 Ensure that the IUT correctly handles template matching of value length definitions > <COMPILE> -<MODULE TTCN NegSem_B010401_length_restrictions_002 NegSem_B010401_length_restrictions_002.ttcn > +<MODULE TTCN NegSem_B010401_length_restrictions_001 NegSem_B010401_length_restrictions_001.ttcn > /*************************************************** ** @version 0.0.1 ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions ** @verdict pass reject ***************************************************/ -module NegSem_B010401_length_restrictions_002 { +module NegSem_B010401_length_restrictions_001 { type record MessageType { @@ -6264,7 +6538,7 @@ module NegSem_B010401_length_restrictions_002 { port loopbackPort messagePort } - testcase TC_NegSem_B010401_length_restrictions_002() runs on GeneralComp { + testcase TC_NegSem_B010401_length_restrictions_001() runs on GeneralComp { var MessageType v_testMessage; @@ -6300,7 +6574,7 @@ module NegSem_B010401_length_restrictions_002 { } control{ - execute(TC_NegSem_B010401_length_restrictions_002()); + execute(TC_NegSem_B010401_length_restrictions_001()); } } @@ -6315,7 +6589,7 @@ error: There are fewer \(5\) elements in the string than it is allowed by the le :exmp *---------------------------------------------------------------------* -:h3. NegSem_B010401_length_restrictions_004 negative test +:h3. NegSem_B010401_length_restrictions_002 negative test .*---------------------------------------------------------------------* :xmp tab=0. @@ -6323,14 +6597,14 @@ error: There are fewer \(5\) elements in the string than it is allowed by the le <COMPILE> -<MODULE TTCN NegSem_B010401_length_restrictions_004 NegSem_B010401_length_restrictions_004.ttcn > +<MODULE TTCN NegSem_B010401_length_restrictions_002 NegSem_B010401_length_restrictions_002.ttcn > /*************************************************** ** @version 0.0.1 ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions ** @verdict pass reject ***************************************************/ -module NegSem_B010401_length_restrictions_004 { +module NegSem_B010401_length_restrictions_002 { type record MessageType { @@ -6350,7 +6624,7 @@ module NegSem_B010401_length_restrictions_004 { port loopbackPort messagePort } - testcase TC_NegSem_B010401_length_restrictions_004() runs on GeneralComp { + testcase TC_NegSem_B010401_length_restrictions_002() runs on GeneralComp { var MessageType v_testMessage; @@ -6382,7 +6656,7 @@ module NegSem_B010401_length_restrictions_004 { } control{ - execute(TC_NegSem_B010401_length_restrictions_004()); + execute(TC_NegSem_B010401_length_restrictions_002()); } } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn new file mode 100644 index 000000000..43d05b6bf --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that identifiers for fields of structured types, enumerated values and groups do not have to be globally unique. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* The following requirements are tested: + * Within the same module,they shall only be reused for enumerated values within other enumerated types or as identifiers for fields of structured types. In addition, enumeration values shall not be used as names of value or + * template definitions of imported enumeration types, defining the given enumeration value + */ + +module Sem_050202_Uniqueness_004 { + type component GeneralComp { + } + + type enumerated MyFirstEnumType {MyFirstEnumValue, MySecondEnumValue} + type enumerated MySecondEnumType {MyFirstEnumValue, MySecondEnumValue} + //enumerated values within other enumerated types or as identifiers for fields of structured types + + testcase TC_Sem_050202_Uniqueness_004() runs on GeneralComp { + + var MyFirstEnumType v_enum := MySecondEnumValue; + var MySecondEnumType v_enum_2 := MySecondEnumValue; + + if (match(v_enum, MyFirstEnumType:MySecondEnumValue) and match(v_enum_2, MySecondEnumType:MySecondEnumValue)) { // local value + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050202_Uniqueness_004()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn new file mode 100644 index 000000000..9c0777ba5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that identifiers for fields of structured types, enumerated values and groups do not have to be globally unique. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Within the same module,they shall only be reused for enumerated values within other enumerated types or as identifiers for fields of structured types. In addition, enumeration values shall not be used as names of value or + * template definitions of imported enumeration types, defining the given enumeration value + */ + +module Sem_050202_Uniqueness_005 { + type component GeneralComp { + } + + type enumerated MyFirstEnumType {MyInt,MySecondEnumValue}; + + type record MyRec { + integer Myint + } + + testcase TC_Sem_050202_Uniqueness_005() runs on GeneralComp { + + var MyFirstEnumType v_enum := MySecondEnumValue; + var MyRec v_rec; + + v_rec.Myint := 1; + + if (match(v_enum, MyFirstEnumType:MySecondEnumValue) and match(v_rec.Myint,1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + control { + execute(TC_Sem_050202_Uniqueness_005()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_008.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_008.ttcn index ec9fc9f6b..8b2301425 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_008.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_008.ttcn @@ -23,7 +23,7 @@ // Restriction e) // The template instance shall not refer to elements of the component type in a runs on clause. -module NegSem_05040102_parameters_of_kind_template_008 { +module NegSem_05040102_parameters_of_kind_template_008 language "TTCN-3:2016" { type component GeneralComp { var template integer vc_int := ?; } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_018.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_018.ttcn new file mode 100644 index 000000000..cdd0bbdd1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_018.ttcn @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, Verify that template parameter of an activated altstep cannot be an out parameter + ** @verdict pass reject + *****************************************************************/ + +module NegSem_05040102_parameters_of_kind_template_018 { + + type component C { + var template integer v_int := ?; + } + + altstep a_test(out template integer p_par) runs on C { + [] any timer.timeout { + p_par := ?; + } + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_018() runs on C { + //var integer v_int := ?; //original line + activate(a_test(v_int)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040102_parameters_of_kind_template_018()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_019.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_019.ttcn new file mode 100644 index 000000000..28bb48b3b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_019.ttcn @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, Verify that template parameter of an activated altstep cannot be an inout parameter + ** @verdict pass reject + *****************************************************************/ + +module NegSem_05040102_parameters_of_kind_template_019 { + + type component C { + var template integer v_int := ?; + } + + altstep a_test(inout template integer p_par) runs on C { + [] any timer.timeout { + p_par := ?; + } + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_019() runs on C { + //var integer v_int := ?; //original line + activate(a_test(v_int)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040102_parameters_of_kind_template_019()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_001.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_001.ttcn new file mode 100644 index 000000000..de9d79e63 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_001.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that functions with timer parameters cannot be used in component.start operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040103_parameters_of_kind_timer_001 { + + type component C { + } + + function f_test(inout timer p_tmr) runs on C { + p_tmr.timeout; + setverdict(pass); + } + + testcase TC_NegSem_05040103_parameters_of_kind_timer_001() runs on C system C { + timer t_tmr := 0.1; + var C v_ptc := C.create; + t_tmr.start; + v_ptc.start(f_test(t_tmr)); + v_ptc.done; + } + + control { + execute(TC_NegSem_05040103_parameters_of_kind_timer_001()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_002.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_002.ttcn new file mode 100644 index 000000000..a4bf1cbad --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_002.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that altsteps with timer parameters cannot be used in component.start operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040103_parameters_of_kind_timer_002 { + + type component C { + } + + altstep f_test(inout timer p_tmr) runs on C { + [] p_tmr.timeout { + setverdict(pass); + } + } + + testcase TC_NegSem_05040103_parameters_of_kind_timer_002() runs on C system C { + timer t_tmr := 0.1; + var C v_ptc := C.create; + t_tmr.start; + v_ptc.start(f_test(t_tmr)); + v_ptc.done; + } + + control { + execute(TC_NegSem_05040103_parameters_of_kind_timer_002()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_003.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_003.ttcn new file mode 100644 index 000000000..dd10f2e13 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_003.ttcn @@ -0,0 +1,41 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that test cases cannot have timer parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040103_parameters_of_kind_timer_003 { + + type component C { + } + + testcase TC_NegSem_05040103_parameters_of_kind_timer_003(timer p_tmr) runs on C { + p_tmr.timeout; + setverdict(pass); + } + + control { + timer t_tmr := 0.1; + t_tmr.start; + execute(TC_NegSem_05040103_parameters_of_kind_timer_003(t_tmr)); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_004.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_004.ttcn new file mode 100644 index 000000000..30f8fee7a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_004.ttcn @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that templates cannot have timer parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040103_parameters_of_kind_timer_004 { + + type component C { + } + + template boolean m_msg (timer p_tmr) := p_tmr.running; + + testcase TC_NegSem_05040103_parameters_of_kind_timer_004() runs on C system C { + timer t_tmr := 0.1; + t_tmr.start; + log(m_msg(t_tmr)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040103_parameters_of_kind_timer_004()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_001.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_001.ttcn new file mode 100644 index 000000000..dded5798b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_001.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that in timer parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal timer parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSyn_05040103_parameters_of_kind_timer_001 { + + type component C { + } + + function f_test(in timer p_tmr) { + p_tmr.timeout; + } + + testcase TC_NegSyn_05040103_parameters_of_kind_timer_001() runs on C { + timer t_tmr := 1.0; + t_tmr.start; + f_test(t_tmr); + setverdict(pass); + } + + control { + execute(TC_NegSyn_05040103_parameters_of_kind_timer_001()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_002.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_002.ttcn new file mode 100644 index 000000000..09d71fb07 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_002.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that out timer parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal timer parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSyn_05040103_parameters_of_kind_timer_002 { + + type component C { + + } + + function f_test(out timer p_tmr) { + + p_tmr.start(1.0); + + } + + + testcase TC_NegSyn_05040103_parameters_of_kind_timer_002() runs on C{ + + timer t_tmr; + + f_test(t_tmr); + + t_tmr.timeout; + setverdict(pass); + + } + + + control { + + execute(TC_NegSyn_05040103_parameters_of_kind_timer_002()); + + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_002.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_002.ttcn new file mode 100644 index 000000000..188a9f3d1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_002.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that inout prefix can be used for timer parameters + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Formal timer parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module Sem_05040103_parameters_of_kind_timer_002 { + + type component C { + } + + function f_test(inout timer p_tmr) { + p_tmr.timeout; + setverdict(pass); + } + + testcase TC_Sem_05040103_parameters_of_kind_timer_002() runs on C { + timer t_tmr := 0.1; + t_tmr.start; + f_test(t_tmr); + } + + control { + execute(TC_Sem_05040103_parameters_of_kind_timer_002()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_003.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_003.ttcn new file mode 100644 index 000000000..7b5b26d1d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_003.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Verify that altstep can have timer parameters + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal timer parameters, with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module Sem_05040103_parameters_of_kind_timer_003 { + + type component C { + } + + altstep a_test(timer p_tmr) { + [] p_tmr.timeout { + setverdict(pass); + } + } + + testcase TC_Sem_05040103_parameters_of_kind_timer_003() runs on C { + timer t_tmr := 0.1; + t_tmr.start; + a_test(t_tmr); + } + + control { + execute(TC_Sem_05040103_parameters_of_kind_timer_003()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_001.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_001.ttcn new file mode 100644 index 000000000..4b276f842 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_001.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that functions with port parameters cannot be used in component.start operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal port parameters, - with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040104_parameters_of_kind_port_001 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + function f_test(P p_port) runs on C { + p_port.send(1); + setverdict(pass); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_001() runs on C system C { + var C v_ptc := C.create; + connect(mtc:p,v_ptc:p); + v_ptc.start(f_test(p)); + v_ptc.done; + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_001()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_002.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_002.ttcn new file mode 100644 index 000000000..795f50c8d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_002.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that altsteps with port parameters cannot be used in component.start operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal port parameters, - with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040104_parameters_of_kind_port_002 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + altstep a_test(P p_port) runs on C { + [] p_port.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_002() runs on C system C { + var C v_ptc := C.create; + connect(mtc:p, mtc:p); + p.send(1); + v_ptc.start(a_test(p)); + v_ptc.done; + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_002()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_003.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_003.ttcn new file mode 100644 index 000000000..add40fb90 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_003.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that in port parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal port parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSem_05040104_parameters_of_kind_port_003 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + function f_test(in P p_port) { + p_port.send(1); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_003() runs on C { + connect(self:p,self:p); + f_test(p); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_003()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_004.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_004.ttcn new file mode 100644 index 000000000..7f8ba7239 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_004.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that out port parameters are not allowed + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Formal port parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module NegSem_05040104_parameters_of_kind_port_004 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + function f_test(out P p_port) { + setverdict(pass); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_004() runs on C { + connect(self:p,self:p); + f_test(p); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_004()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_005.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_005.ttcn new file mode 100644 index 000000000..674f1848c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_005.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that test cases cannot have port parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal port parameters, - with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040104_parameters_of_kind_port_005 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + testcase TC_Test(P p_port) runs on C { // should cause a compilation error + p_port.send(1); + setverdict(pass); + } + + testcase TC_NegSem_05040104_parameters_of_kind_port_005(P p_port) runs on C { + connect(self:p,self:p); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_005()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_006.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_006.ttcn new file mode 100644 index 000000000..ee2430171 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_006.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that templates cannot contain port parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Only function and altstep definitions may have formal port parameters, - with the exception of functions or +// altsteps started as test component behaviour (see clause 21.3.2). + +module NegSem_05040104_parameters_of_kind_port_006 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + template boolean m_msg(P p_par) := p_par.checkstate("Started"); + + testcase TC_NegSem_05040104_parameters_of_kind_port_006() runs on C system C { + log(m_msg(p)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_006()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_002.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_002.ttcn new file mode 100644 index 000000000..370c36685 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_002.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Verify that inout prefix can be used for port parameters + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Formal port parameters shall be inout parameters, which can optionally be indicated by the keyword inout. + +module Sem_05040104_parameters_of_kind_port_002 { + + type port P message { + inout integer + } with {extension "internal"} + + type component C { + port P p; + } + + function f_test(inout P p_port) { + p_port.send(1); + setverdict(pass); + } + + testcase TC_Sem_05040104_parameters_of_kind_port_002() runs on C { + connect(self:p,self:p); + f_test(p); + } + + control { + execute(TC_Sem_05040104_parameters_of_kind_port_002()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn index f04af6eb2..0beabdc3f 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_057 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn index 31ae0c129..bf680ef4a 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_058 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn index aa7a70991..f8f34b71d 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_059 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn index 72939bcaf..842924ef1 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_060 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn index 5b603fb38..704f023ae 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_061 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn index 85019a369..0ab6053c0 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of functions ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_062 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn index 492bdcb26..35857e90b 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_063 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn index 4080aa0e5..e6201a83b 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_064 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn index 9ed5cbfd8..5cc442e2a 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that constants cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_065 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn index 34af805b4..165e30067 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_066 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn index e9182dc35..4faa5362c 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_067 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn index 31e8cd726..2ed19272d 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template parameters cannot be used as out formal template parameters of altsteps ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_068 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn index 264c8ca5f..649753586 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that literals cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_069 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn index 2561ab594..bec99bbf2 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn @@ -14,17 +14,15 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that module parameters cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. - module NegSem_050402_actual_parameters_070 { type component GeneralComp { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn index da0bdd62e..b974e36ad 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn @@ -20,9 +20,8 @@ ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_071 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn index 620eeeffd..aaccf24d5 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that function calls cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_072 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn index 405901486..cc19d27a9 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that expressions cannot be used as out formal template parameters of test cases ** @verdict pass reject ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_073 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn index 184027d3c..e3c43356e 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn @@ -20,9 +20,8 @@ ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module NegSem_050402_actual_parameters_074 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn new file mode 100644 index 000000000..f1e754625 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literal cannot be used as actual out value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_146 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_146() runs on GeneralComp { + f_test(1); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_146()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn new file mode 100644 index 000000000..13f437e97 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expression cannot be used as actual out value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_147 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_147() runs on GeneralComp { + var integer v_val := 5; + f_test(10 + f_ret() - v_val); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_147()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn new file mode 100644 index 000000000..25602c511 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls cannot be used as actual out value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_148 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_148() runs on GeneralComp { + f_test(f_ret()); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_148()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn new file mode 100644 index 000000000..67fde68f9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters cannot be used as actual out value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_149 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_149() runs on GeneralComp { + f_test(PX_VAL); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_149()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn new file mode 100644 index 000000000..2926e1751 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that templates cannot be used as actual out value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_150 { + + type component GeneralComp { + } + + template integer mw_msg := ?; + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_150() runs on GeneralComp { + f_test(mw_msg); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_150()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn new file mode 100644 index 000000000..7db808996 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants cannot be used as actual out value parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_151 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_151() runs on GeneralComp { + const integer c_val := 3; + f_test(c_val); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_151()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn new file mode 100644 index 000000000..3e39de03b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literal cannot be used as actual out value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_152 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_NegSem_050402_actual_parameters_152() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(1); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_152()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn new file mode 100644 index 000000000..1498d119a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expression cannot be used as actual out value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_153 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_NegSem_050402_actual_parameters_153() runs on GeneralComp { + var integer v_val := 5; + timer t_tmr := 0.1; + t_tmr.start; + a_test(10 + f_ret() - v_val); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_153()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn new file mode 100644 index 000000000..ffaa6efcf --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls cannot be used as actual out value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_154 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_ret() return integer { + return 4; + } + + testcase TC_NegSem_050402_actual_parameters_154() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(f_ret()); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_154()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn new file mode 100644 index 000000000..5b09ce575 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters cannot be used as actual out value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_155 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_NegSem_050402_actual_parameters_155() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(PX_VAL); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_155()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn new file mode 100644 index 000000000..dcf2f6ae8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that templates cannot be used as actual out value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_156 { + + type component GeneralComp { + } + + template integer mw_msg := ?; + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_NegSem_050402_actual_parameters_156() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(mw_msg); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_156()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn new file mode 100644 index 000000000..f12cc6ae0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants cannot be used as actual out value parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module NegSem_050402_actual_parameters_157 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_NegSem_050402_actual_parameters_157() runs on GeneralComp { + const integer c_val := 3; + timer t_tmr := 0.1; + t_tmr.start; + a_test(c_val); + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_157()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn new file mode 100644 index 000000000..3da92c731 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function cannot have more actual than formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. + +module NegSem_050402_actual_parameters_158 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_158() runs on GeneralComp { + f_test(1, 2); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_158()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn new file mode 100644 index 000000000..fe877f1af --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn @@ -0,0 +1,41 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that templates cannot have more actual than formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. + +module NegSem_050402_actual_parameters_159 { + + type component GeneralComp { + } + + template integer mw_range (integer p_par) := (0..p_par); + + testcase TC_NegSem_050402_actual_parameters_159() runs on GeneralComp { + log(mw_range(1, 2)); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_159()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn new file mode 100644 index 000000000..5e66c90eb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that altstep cannot have more actual than formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. + +module NegSem_050402_actual_parameters_160 { + + type component GeneralComp { + } + + altstep a_test(in integer p_val) { + [] any timer.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_NegSem_050402_actual_parameters_160() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(1, 2); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_160()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn new file mode 100644 index 000000000..ce90c416e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn @@ -0,0 +1,39 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that testcase cannot have more actual than formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The number of actual parameters in the list notation shall not exceed the number of parameters +// in the formal parameter list. + +module NegSem_050402_actual_parameters_161 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_161(in integer p_val) runs on GeneralComp { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_161(1, 2)); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn new file mode 100644 index 000000000..b59c1043c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that restricted template variables cannot be passed to unrestricted inout template parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For inout formal template parameters, the template restriction of the actual and the formal parameter must be the same. + +module NegSem_050402_actual_parameters_162 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 optional + } + + function f_test (inout template R1 p_val) { + if (valueof(p_val) == { field1 := 1, field2 := 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_162() runs on GeneralComp { + var template(value) R1 v_rec := { 1, 2 }; + f_test(v_rec); + } + + control { + execute(TC_NegSem_050402_actual_parameters_162()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn new file mode 100644 index 000000000..f3ec20574 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that unrestricted template variables cannot be passed to restricted inout template parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For inout formal template parameters, the template restriction of the actual and the formal parameter must be the same. + +module NegSem_050402_actual_parameters_163 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 optional + } + + function f_test (inout template(value) R1 p_val) { + if (valueof(p_val) == { field1 := 1, field2 := 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_163() runs on GeneralComp { + var template R1 v_rec := { 1, 2 }; + f_test(v_rec); + } + + control { + execute(TC_NegSem_050402_actual_parameters_163()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn new file mode 100644 index 000000000..bde825bea --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that restricted template variables cannot be passed to inout template parameters with a different restriction + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For inout formal template parameters, the template restriction of the actual and the formal parameter must be the same. + +module NegSem_050402_actual_parameters_164 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 optional + } + + function f_test (inout template(omit) R1 p_val) { + if (valueof(p_val) == { field1 := 1, field2 := 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_164() runs on GeneralComp { + var template(value) R1 v_rec := { 1, 2 }; + f_test(v_rec); + } + + control { + execute(TC_NegSem_050402_actual_parameters_164()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn new file mode 100644 index 000000000..ab3e0c7ec --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value variables cannot be used as out formal template parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_165 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := 2; + } + + testcase TC_NegSem_050402_actual_parameters_165() runs on GeneralComp { + var integer vm_msg; + f_test(vm_msg); // tested parameter passing + if (match(2, vm_msg)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_165()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn new file mode 100644 index 000000000..e3943a1f3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value in parameters cannot be used as out formal template parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_166 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := 0; + } + + function f_caller(in integer p_val) { + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_NegSem_050402_actual_parameters_166() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_166()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn new file mode 100644 index 000000000..f7018af61 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value out parameters cannot be used as out formal template parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_167 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := 0; + } + + function f_caller(out integer p_val) { + p_val := 4; // out parameter shall have a value before we can pass it to a function + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_NegSem_050402_actual_parameters_167() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_167()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn new file mode 100644 index 000000000..530acc2b5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value inout parameters cannot be used as out formal template parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_168 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := 0; + } + + function f_caller(inout integer p_val) { + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_NegSem_050402_actual_parameters_168() runs on GeneralComp { + var integer v_val := 5; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_168()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn new file mode 100644 index 000000000..ed93e26ca --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value variable element reference cannot be used as out formal template parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_169 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + function f_test(out template integer p_val) { + p_val := ?; + } + + testcase TC_NegSem_050402_actual_parameters_169() runs on GeneralComp { + var R v_val := { field1 := 10 }; + f_test(v_val.field1); // tested parameter passing + if (match( { field1 := 0 }, v_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_169()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn new file mode 100644 index 000000000..e3a88438a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as out formal template parameters of functions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_170 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + function f_test(out template integer p_val) { + p_val := ?; + } + + function f_caller(in R p_param) { + f_test(p_param.field1); // tested parameter passing + if (match( { field1 := 0 }, p_param)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_170() runs on GeneralComp { + f_caller({field1 := 11 }); + } + + control { + execute(TC_NegSem_050402_actual_parameters_170()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn new file mode 100644 index 000000000..6de22fcf3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value variables cannot be used as out formal template parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_171 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } + } + + testcase TC_NegSem_050402_actual_parameters_171() runs on GeneralComp { + var integer vm_msg := 2; + t.start; + a_test(vm_msg); // tested parameter passing + if (match(0, vm_msg)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_171()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn new file mode 100644 index 000000000..2499d0d57 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value in parameters cannot be used as out formal template parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_172 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } + } + + function f_caller(in integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_NegSem_050402_actual_parameters_172() runs on GeneralComp { + t.start; + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_172()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn new file mode 100644 index 000000000..777d4bf40 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value out parameters cannot be used as out formal template parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_173 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } + } + + function f_caller(out integer p_val) runs on GeneralComp { + p_val := 4; // out parameter shall have a value before we can pass it to a function + a_test(p_val); // tested parameter passing + if (match(0 , p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_NegSem_050402_actual_parameters_173() runs on GeneralComp { + var integer v_val; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_173()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn new file mode 100644 index 000000000..86ff11a72 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value inout parameters cannot be used as out formal template parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_174 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 0; + } + } + + function f_caller(inout integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_NegSem_050402_actual_parameters_174() runs on GeneralComp { + var integer v_val := 5; + t.start; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_NegSem_050402_actual_parameters_174()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn new file mode 100644 index 000000000..16b0736d3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value variable element reference cannot be used as out formal template parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_175 { + + type component GeneralComp { + timer t := 0.0; + } + + type record R { + integer field1 + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 5; + } + } + + testcase TC_NegSem_050402_actual_parameters_175() runs on GeneralComp { + var R v_val := { field1 := 10 }; + t.start; + a_test(v_val.field1); // tested parameter passing + if (match({ field1 := 5 }, v_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_175()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn new file mode 100644 index 000000000..9581de2da --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as out formal template parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_176 { + + type component GeneralComp { + timer t := 0.0; + } + + type record R { + integer field1 + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := 5; + } + } + + function f_caller(in R p_param) runs on GeneralComp { + a_test(p_param.field1); // tested parameter passing + if (match({ field1 := 5 }, p_param)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_176() runs on GeneralComp { + t.start; + f_caller({field1 := 11 }); + } + + control { + execute(TC_NegSem_050402_actual_parameters_176()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn new file mode 100644 index 000000000..af98d547c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn @@ -0,0 +1,41 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value variables cannot be used as out formal template parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_177 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_177(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + control { + var integer vm_msg := 2; + execute(TC_NegSem_050402_actual_parameters_177(vm_msg)); // tested parameter passing + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn new file mode 100644 index 000000000..d3f1da4f9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value in parameters cannot be used as out formal template parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_178 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_178(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(in integer p_val) { + execute(TC_NegSem_050402_actual_parameters_178(p_val)); // tested parameter passing + } + + control { + f_caller(3); // this parameter passing is not a subject of the test + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn new file mode 100644 index 000000000..0d6ad402a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value out parameters cannot be used as out formal template parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_179 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_179(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(out integer p_val) { + execute(TC_NegSem_050402_actual_parameters_179(p_val)); // tested parameter passing + } + + control { + var integer vm_val; + f_caller(vm_val); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn new file mode 100644 index 000000000..ee00adf1a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that value inout parameters cannot be used as out formal template parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_180 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_180(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(inout integer p_val) { + execute(TC_NegSem_050402_actual_parameters_180(p_val)); // tested parameter passing + } + + control { + var integer vm_val := 5; + f_caller(vm_val); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn new file mode 100644 index 000000000..d6b2fa44d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variable element reference cannot be used as out formal template parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_181 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + testcase TC_NegSem_050402_actual_parameters_181(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + control { + var R v_val := { field1 := 10 }; + execute(TC_NegSem_050402_actual_parameters_181(v_val.field1)); // tested parameter passing + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn new file mode 100644 index 000000000..3cdbc6060 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters cannot be used as out formal template parameters of test cases + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template +// parameters of structured types. + +module NegSem_050402_actual_parameters_182 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + testcase TC_NegSem_050402_actual_parameters_182(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(in R p_param) { + execute(TC_NegSem_050402_actual_parameters_182(p_param.field1)); // tested parameter passing + } + + control { + var R mw_t := { field1 := 1 }; + f_caller(mw_t); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn index ccd1488d1..dbfdc1852 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template variables can be used as out formal template parameters of functions ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_113 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn index 340869f1e..d8ad23c27 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn @@ -14,16 +14,16 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template in parameters can be used as out formal template parameters of functions ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. + module Sem_050402_actual_parameters_114 { type component GeneralComp { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn index 81f8ce0e6..0d361c3e6 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template out parameters can be used as out formal template parameters of functions ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_115 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn index 87e23cd35..fab6b2c2a 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template inout parameters can be used as out formal template parameters of functions ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_116 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn index 15e187e82..a7a90cb36 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template variable element reference can be used as out formal template parameters of functions ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_117 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn index ada5ed3d4..17bf797ab 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn @@ -14,16 +14,16 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as out formal template parameters of functions ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. + module Sem_050402_actual_parameters_118 { type component GeneralComp { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn index 9f76fa560..ca6d558b7 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template variables can be used as out formal template parameters of altsteps ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_119 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn index 02c98651b..13c4ae9a7 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template in parameters can be used as out formal template parameters of altsteps ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_120 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn index 71742b001..db88a1a6b 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template out parameters can be used as out formal template parameters of altsteps ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_121 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn index 01cda85a6..64adf8bba 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template inout parameters can be used as out formal template parameters of altsteps ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_122 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn index 512e47cc5..39774b324 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template variable element reference can be used as out formal template parameters of altsteps ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_123 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn index 2751df37f..7eb5d3309 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as out formal template parameters of altsteps ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_124 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn index ac0ff8dc6..48d4fd3b2 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template variables can be used as out formal template parameters of test cases ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_125 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn index f7d477932..4a1f3fee2 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template in parameters can be used as out formal template parameters of test cases ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_126 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn index 5b1c76b46..acdbd99e5 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template out parameters can be used as out formal template parameters of test cases ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_127 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn index a631b244d..bfe0f97b8 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template inout parameters can be used as out formal template parameters of test cases ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_128 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn index 0d27a6faa..9776acc4c 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that template variable element reference can be used as out formal template parameters of test cases ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_129 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn index f3b453f7b..a7e96fa78 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn @@ -14,15 +14,14 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as out formal template parameters of test cases ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // The following requirement is tested: -// Actual parameters that are passed to out formal template parameters shall be variables, -// template variables, formal value parameters, formal template parameters or references -// to elements of variables, template variables, formal value parameters or formal template +// Actual parameters that are passed to out formal template parameters shall be template variables, +// formal template parameters or references to elements of template variables or formal template // parameters of structured types. module Sem_050402_actual_parameters_130 { diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn index 0692bb488..db17a7ea7 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn @@ -34,14 +34,13 @@ module Sem_050402_actual_parameters_135 { integer field1 } - //function f_test(inout template(present) integer p_val) <-- something not working with present - function f_test(inout template integer p_val) { + function f_test(inout template(present) integer p_val) { if (match(10, p_val)) { setverdict(pass); } else { setverdict(fail); } } testcase TC_Sem_050402_actual_parameters_135() runs on GeneralComp { - var template R v_val := { field1 := 10 }; + var template(present) R v_val := { field1 := 10 }; f_test(v_val.field1); // tested parameter passing } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn index 786dae8f1..6c4b59149 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn @@ -34,13 +34,12 @@ module Sem_050402_actual_parameters_136 { integer field1 } - //function f_test(inout template(present) integer p_val) <-- something not working with present - function f_test(inout template integer p_val) { + function f_test(inout template(present) integer p_val) { if (match(11, p_val)) { setverdict(pass); } else { setverdict(fail); } } - function f_caller(in template R p_param) { + function f_caller(in template(present) R p_param) { f_test(p_param.field1); // tested parameter passing } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn index 311db40f2..3f5ea686b 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn @@ -35,8 +35,7 @@ module Sem_050402_actual_parameters_141 { integer field1 } - //altstep a_test(inout template(present) integer p_val) runs on GeneralComp <-- something not working with present - altstep a_test(inout template integer p_val) runs on GeneralComp { + altstep a_test(inout template(present) integer p_val) runs on GeneralComp { []t.timeout { if (match(10, p_val)) { setverdict(pass); } else { setverdict(fail); } @@ -44,7 +43,7 @@ module Sem_050402_actual_parameters_141 { } testcase TC_Sem_050402_actual_parameters_141() runs on GeneralComp { - var template R v_val := { field1 := 10 }; + var template(present) R v_val := { field1 := 10 }; t.start; a_test(v_val.field1); // tested parameter passing } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn index af80da497..1ace4cca6 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn @@ -36,14 +36,14 @@ module Sem_050402_actual_parameters_142 { } //altstep a_test(inout template(present) integer p_val) runs on GeneralComp <-- something not working with present - altstep a_test(inout template integer p_val) runs on GeneralComp { + altstep a_test(inout template(present) integer p_val) runs on GeneralComp { []t.timeout { if (match(11, p_val)) { setverdict(pass); } else { setverdict(fail); } } } - function f_caller(in template R p_param) runs on GeneralComp { + function f_caller(in template(present) R p_param) runs on GeneralComp { a_test(p_param.field1); // tested parameter passing } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn index d8c2452f9..0dfae2524 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn @@ -34,15 +34,13 @@ module Sem_050402_actual_parameters_147 { integer field1 } - //testcase TC_Sem_050402_actual_parameters_147(inout template(present) integer p_val) runs on GeneralComp - // something not working with present --^ - testcase TC_Sem_050402_actual_parameters_147(inout template integer p_val) runs on GeneralComp { + testcase TC_Sem_050402_actual_parameters_147(inout template(present) integer p_val) runs on GeneralComp { if (match(10, p_val)) { setverdict(pass); } else { setverdict(fail); } } control { - var template R v_val := { field1 := 10 }; + var template(present) R v_val := { field1 := 10 }; execute(TC_Sem_050402_actual_parameters_147(v_val.field1)); // tested parameter passing } } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn index 7bb9c5b8f..fcf108784 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn @@ -34,14 +34,12 @@ module Sem_050402_actual_parameters_148 { integer field1 } - //testcase TC_Sem_050402_actual_parameters_148(inout template(present) integer p_val) runs on GeneralComp - // something not working with present --^ - testcase TC_Sem_050402_actual_parameters_148(inout template integer p_val) runs on GeneralComp { + testcase TC_Sem_050402_actual_parameters_148(inout template(present) integer p_val) runs on GeneralComp { if (match(11, p_val)) { setverdict(pass); } else { setverdict(fail); } } - function f_caller(in template R p_param) { + function f_caller(in template(present) R p_param) { execute(TC_Sem_050402_actual_parameters_148(p_param.field1)); // tested parameter passing } diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn index fdfda8e73..7770c514a 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn @@ -38,14 +38,14 @@ module Sem_050402_actual_parameters_154 { } //function f_test(inout template(present) integer p_val) <-- ref bug everywhere - function f_test(inout template integer p_val) { + function f_test(inout template(present) integer p_val) { if (match(25, p_val)) { setverdict(pass); } else { setverdict(fail); } p_val := 10; } testcase TC_Sem_050402_actual_parameters_154() runs on GeneralComp { - var template R v_rec := { + var template(present) R v_rec := { field1 := 1, field2 := ? }; diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn new file mode 100644 index 000000000..7a85b7325 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_203 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_Sem_050402_actual_parameters_203() runs on GeneralComp { + var integer v_val := 5; + f_test(v_val); // tested parameter passing + if (v_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_203()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn new file mode 100644 index 000000000..efe0e7190 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_204 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_Sem_050402_actual_parameters_204() runs on GeneralComp { + var template integer v_val := 5; + f_test(v_val); // tested parameter passing + if (valueof(v_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_204()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn new file mode 100644 index 000000000..3b81901e5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_205 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + function f_caller(integer p_val) { + f_test(p_val); // tested parameter passing + if (p_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_205() runs on GeneralComp { + f_caller(0); + } + + control { + execute(TC_Sem_050402_actual_parameters_205()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn new file mode 100644 index 000000000..0f142069d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_206 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + function f_caller(out integer p_val) { + f_test(p_val); // tested parameter passing + if (p_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_206() runs on GeneralComp { + var integer v_val; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_206()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn new file mode 100644 index 000000000..595cc04e0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_207 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + function f_caller(inout integer p_val) { + f_test(p_val); // tested parameter passing + if (p_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_207() runs on GeneralComp { + var integer v_val := 1; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_207()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn new file mode 100644 index 000000000..3e0e9da47 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in template parameters can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_208 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + function f_caller(template integer p_val) { + f_test(p_val); // tested parameter passing + if (valueof(p_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_208() runs on GeneralComp { + f_caller(?); + } + + control { + execute(TC_Sem_050402_actual_parameters_208()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn new file mode 100644 index 000000000..6f93c54c0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out template parameters can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_209 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + function f_caller(out template integer p_val) { + f_test(p_val); // tested parameter passing + if (valueof(p_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_209() runs on GeneralComp { + var template integer v_val; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_209()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn new file mode 100644 index 000000000..c27015d0e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout template parameters can be used as actual out value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_210 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + function f_caller(inout template integer p_val) { + f_test(p_val); // tested parameter passing + if (valueof(p_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_210() runs on GeneralComp { + var template integer v_val := ?; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_210()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn new file mode 100644 index 000000000..f40763406 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that dash can be used as an actual out value parameter of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_211 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_Sem_050402_actual_parameters_211() runs on GeneralComp { + f_test(-); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_211()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn new file mode 100644 index 000000000..e4eb9ce41 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_212 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_Sem_050402_actual_parameters_212() runs on GeneralComp { + var integer v_val := 5; + timer t_tmr := 0.1; + t_tmr.start; + a_test(v_val); // tested parameter passing + if (v_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_212()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn new file mode 100644 index 000000000..6e04d356f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_213 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_Sem_050402_actual_parameters_213() runs on GeneralComp { + var template integer v_val := 5; + timer t_tmr := 0.1; + t_tmr.start; + a_test(v_val); // tested parameter passing + if (valueof(v_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_213()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn new file mode 100644 index 000000000..47ba94900 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_214 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_caller(integer p_val) { + timer t_tmr := 0.1; + t_tmr.start; + a_test(p_val); // tested parameter passing + if (p_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_214() runs on GeneralComp { + f_caller(0); + } + + control { + execute(TC_Sem_050402_actual_parameters_214()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn new file mode 100644 index 000000000..63a52d2cf --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_215 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_caller(out integer p_val) { + timer t_tmr := 0.1; + t_tmr.start; + a_test(p_val); // tested parameter passing + if (p_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_215() runs on GeneralComp { + var integer v_val; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_215()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn new file mode 100644 index 000000000..ef551e60c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_216 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_caller(inout integer p_val) { + timer t_tmr := 0.1; + t_tmr.start; + a_test(p_val); // tested parameter passing + if (p_val == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_216() runs on GeneralComp { + var integer v_val := 1; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_216()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn new file mode 100644 index 000000000..7c047bd08 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in template parameters can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_217 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_caller(template integer p_val) { + timer t_tmr := 0.1; + t_tmr.start; + a_test(p_val); // tested parameter passing + if (valueof(p_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_217() runs on GeneralComp { + f_caller(?); + } + + control { + execute(TC_Sem_050402_actual_parameters_217()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn new file mode 100644 index 000000000..b3180c01b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out template parameters can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_218 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_caller(out template integer p_val) { + timer t_tmr := 0.1; + t_tmr.start; + a_test(p_val); // tested parameter passing + if (valueof(p_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_218() runs on GeneralComp { + var template integer v_val; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_218()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn new file mode 100644 index 000000000..3e191bcfb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout template parameters can be used as actual out value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_219 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + function f_caller(inout template integer p_val) { + timer t_tmr := 0.1; + t_tmr.start; + a_test(p_val); // tested parameter passing + if (valueof(p_val) == 9) { + setverdict(pass); + }else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_219() runs on GeneralComp { + var template integer v_val := ?; + f_caller(v_val); + } + + control { + execute(TC_Sem_050402_actual_parameters_219()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn new file mode 100644 index 000000000..4bf57fa62 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that dash can be used as an actual out value parameter of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal value parameters shall be (template) variables, +// formal (template) parameters (of in, inout or out parameterization) or references to elements +// of (template) variables or formal (template) parameters of structured types. Furthermore it is +// allowed to use the dash symbol "-" as an actual out parameter, signifying that a possible result +// for that parameter will not be passed back. + +module Sem_050402_actual_parameters_220 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_Sem_050402_actual_parameters_220() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(-); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_220()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn new file mode 100644 index 000000000..ca57f096d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that dash can be used as an actual out template parameter of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, formal +// template parameters or references to elements of template variables or formal template parameters of +// structured types. Furthermore it is allowed to use the dash symbol "-" as an actual out parameter, +// signifying that a possible result for that parameter will not be passed back. + +module Sem_050402_actual_parameters_221 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := ? + } + + testcase TC_Sem_050402_actual_parameters_221() runs on GeneralComp { + f_test(-); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_221()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn new file mode 100644 index 000000000..deb208194 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that dash can be used as an actual out template parameter of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to out formal template parameters shall be template variables, formal +// template parameters or references to elements of template variables or formal template parameters of +// structured types. Furthermore it is allowed to use the dash symbol "-" as an actual out parameter, +// signifying that a possible result for that parameter will not be passed back. + +module Sem_050402_actual_parameters_222 { + + type component GeneralComp { + } + + altstep a_test(out template integer p_val) { + [] any timer.timeout { + p_val := ? + } + } + + testcase TC_Sem_050402_actual_parameters_222() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(-); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_222()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn new file mode 100644 index 000000000..f5b348a49 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual out value parameters of functions can be skipped if they are the last ones + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An actual parameter can also be skipped by just leaving it out if no other actual parameter follows in the actual parameter +// list - either because the parameter is last or because all following formal parameters are out parameters or have default +// values and are left out. + +module Sem_050402_actual_parameters_223 { + + type component GeneralComp { + } + + function f_test(out integer p_val) { + p_val := 9 + } + + testcase TC_Sem_050402_actual_parameters_223() runs on GeneralComp { + f_test(); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_223()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn new file mode 100644 index 000000000..a7219afe6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual out value parameters of altsteps can be skipped if they are the last ones + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An actual parameter can also be skipped by just leaving it out if no other actual parameter follows in the actual parameter +// list - either because the parameter is last or because all following formal parameters are out parameters or have default +// values and are left out. + +module Sem_050402_actual_parameters_224 { + + type component GeneralComp { + } + + altstep a_test(out integer p_val) { + [] any timer.timeout { + p_val := 9 + } + } + + testcase TC_Sem_050402_actual_parameters_224() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(-); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_224()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn new file mode 100644 index 000000000..f42eff253 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual out template parameters of functions can be skipped if they are the last ones + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An actual parameter can also be skipped by just leaving it out if no other actual parameter follows in the actual parameter +// list - either because the parameter is last or because all following formal parameters are out parameters or have default +// values and are left out. + +module Sem_050402_actual_parameters_225 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := ? + } + + testcase TC_Sem_050402_actual_parameters_225() runs on GeneralComp { + f_test(); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_225()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn new file mode 100644 index 000000000..74b6725aa --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual out template parameters of altsteps can be skipped if they are the last ones + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An actual parameter can also be skipped by just leaving it out if no other actual parameter follows in the actual parameter +// list - either because the parameter is last or because all following formal parameters are out parameters or have default +// values and are left out. + +module Sem_050402_actual_parameters_226 { + + type component GeneralComp { + } + + altstep a_test(out template integer p_val) { + [] any timer.timeout { + p_val := ? + } + } + + testcase TC_Sem_050402_actual_parameters_226() runs on GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + a_test(); // tested parameter passing + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_226()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn index 66382e812..a025a61dc 100644 --- a/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn @@ -14,7 +14,7 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:5.5, Verify that cyclic altsteps are allowed ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ @@ -31,6 +31,7 @@ module Sem_0505_cyclic_definitions_004 { type component GeneralComp { var integer vc_receiveCounter := 0; + timer t_tmr := 1.0; port P p1; } @@ -56,6 +57,7 @@ module Sem_0505_cyclic_definitions_004 { for (var integer i := 0; i < 5; i := i + 1) { p1.send(i); } + t_tmr.start; a_test(); } diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_001.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_001.ttcn new file mode 100644 index 000000000..1ea04aaa0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_001.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Accessing not individual elements of a bitstring + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * Only single elements of the string may be accessed. + * Trying to assign strings with length 0 or more than 1 + * to a string element using the array-like syntax shall + * cause an error. +*/ + +module NegSem_06010101_AccessStringElements_001 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_001() runs on GeneralComp { + var bitstring v_b := '100010'B; + v_b[1] := '11'B; //error: only individual elements can be accessed + if (v_b == '100001'B){ + setverdict(pass); + } + else { + setverdict(fail, "v_b:",v_b); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_001()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_002.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_002.ttcn new file mode 100644 index 000000000..d3950eb3b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_002.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access bitstring element out of range + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_002 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_002() runs on GeneralComp { + var bitstring v_b := '100010'B; + v_b[7] := '0'B; //error: index outside of range + if (v_b == '100001'B){ + setverdict(pass); + } + else { + setverdict(fail, "v_b:",v_b); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_002()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_003.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_003.ttcn new file mode 100644 index 000000000..53f28faea --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_003.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Created by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Accessing not individual elements of a hexstring + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_003 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_003() runs on GeneralComp { + var hexstring v_h := '100010'H; + v_h[1] := '01'H; //error: only individual elements can be accessed + if (v_h == '100001'H){ + setverdict(pass); + } + else { + setverdict(fail, "v_h:",v_h); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_003()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_004.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_004.ttcn new file mode 100644 index 000000000..d8582a12a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_004.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Created by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access hexstring element out of range + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_004 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_004() runs on GeneralComp { + var hexstring v_h := '100010'H; + v_h[7] := '0'H; //error: index outside of range + if (v_h == '100001'H){ + setverdict(pass); + } + else { + setverdict(fail, "v_h:",v_h); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_004()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_005.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_005.ttcn new file mode 100644 index 000000000..8e9fc191e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_005.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Created by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Accessing not individual elements of an octetstring + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_005 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_005() runs on GeneralComp { + var octetstring v_o := '100010'O; + v_o[1] := '0120'O; //error: only individual elements can be accessed + if (v_o == '100001'O){ + setverdict(pass); + } + else { + setverdict(fail, "v_o:",v_o); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_005()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_006.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_006.ttcn new file mode 100644 index 000000000..568a7eef3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_006.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Created by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access hexstring element out of range + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index shall be between zero and the + * length of the string minus one for retrieving + * an element from a string. Trying to retrieve outside + * this range shall cause an error. +*/ + +module NegSem_06010101_AccessStringElements_006 { + + type component GeneralComp {} + + testcase TC_NegSem_06010101_AccessStringElements_006() runs on GeneralComp { + var octetstring v_o := '100010'O; + v_o[4] := '01'O; //error: only individual elements can be accessed + if (v_o == '100001'O){ + setverdict(pass); + } + else { + setverdict(fail, "v_o:",v_o); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_006()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn new file mode 100755 index 000000000..9e5a72d36 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read bitstring with newline character + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Within the quotes any number of whitespaces or any sequence of the following C0 control characters: + * LF(10), VT(11), FF(12), CR(13) which constitutes a newline may be included. The newline shall be preceded by a backslash ("\"). + * Such whitespaces, control characters and backslash will be ignored for the value and length calculation. +*/ + +module Sem_060101_TopLevel_008 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_008() runs on GeneralComp { + var bitstring v_a := '0101\ + 1010'B; + + if (match(v_a,'01011010'B)) + { + setverdict(pass,"v_a:",v_a); + } + else { + setverdict(fail,"v_a:",v_a); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_008()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn new file mode 100755 index 000000000..cba917bbc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Ensure that whitespaces, control characters and backslash will be ignored for the bitstring length calculation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Within the quotes any number of whitespaces or any sequence of the following C0 control characters: + * LF(10), VT(11), FF(12), CR(13) which constitutes a newline may be included. The newline shall be preceded by a backslash ("\"). + * Such whitespaces, control characters and backslash will be ignored for the value and length calculation. +*/ + +module Sem_060101_TopLevel_009 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_009() runs on GeneralComp { + var bitstring v_a := '0101\ + 1010'B; + + if (match(lengthof(v_a), 8)) + { + setverdict(pass,"Size of v_a is:",lengthof(v_a)); + } + else { + setverdict(fail,"Size of v_a is:",lengthof(v_a)); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_009()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn new file mode 100755 index 000000000..6ff6d0b79 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read hexstring with newline character + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Within the quotes any number of whitespaces or any sequence of the following C0 control characters: + * LF(10), VT(11), FF(12), CR(13) which constitutes a newline may be included. The newline shall be preceded by a backslash ("\"). + * Such whitespaces, control characters and backslash will be ignored for the value and length calculation. +*/ + +module Sem_060101_TopLevel_010 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_010() runs on GeneralComp { + var hexstring v_a := 'Ab\ + cD'H; + + if (match(v_a,'AbcD'H)) + { + setverdict(pass,"v_a:",v_a); + } + else { + setverdict(fail,"v_a:",v_a); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_010()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn new file mode 100755 index 000000000..dabee8c1a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Ensure that whitespaces, control characters and backslash will be ignored for the hexstring length calculation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Within the quotes any number of whitespaces or any sequence of the following C0 control characters: + * LF(10), VT(11), FF(12), CR(13) which constitutes a newline may be included. The newline shall be preceded by a backslash ("\"). + * Such whitespaces, control characters and backslash will be ignored for the value and length calculation. +*/ + +module Sem_060101_TopLevel_011 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_011() runs on GeneralComp { + var hexstring v_a := '12\ + 34\ + Ab\ + Cd'H; + + if (match(lengthof(v_a), 8)) + { + setverdict(pass,"Size of v_a is:",lengthof(v_a)); + } + else { + setverdict(fail,"Size of v_a is:",lengthof(v_a)); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_011()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn new file mode 100755 index 000000000..54ff0e83b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read octetstring with newline character + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Within the quotes any number of whitespaces or any sequence of the following C0 control characters: + * LF(10), VT(11), FF(12), CR(13) which constitutes a newline may be included. The newline shall be preceded by a backslash ("\"). + * Such whitespaces, control characters and backslash will be ignored for the value and length calculation. +*/ + +module Sem_060101_TopLevel_012 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_012() runs on GeneralComp { + var octetstring v_a := '1234\ + 56'O; + + if (match(v_a,'123456'O)) + { + setverdict(pass,"v_a:",v_a); + } + else { + setverdict(fail,"v_a:",v_a); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_012()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn new file mode 100755 index 000000000..2d37da8a3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Ensure that whitespaces, control characters and backslash will be ignored for the octetstring length calculation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Within the quotes any number of whitespaces or any sequence of the following C0 control characters: + * LF(10), VT(11), FF(12), CR(13) which constitutes a newline may be included. The newline shall be preceded by a backslash ("\"). + * Such whitespaces, control characters and backslash will be ignored for the value and length calculation. +*/ + +module Sem_060101_TopLevel_013 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_013() runs on GeneralComp { + var octetstring v_a := '12\ + 34\ + 56'O; // 3 octets + + if (match(lengthof(v_a), 3)) + { + setverdict(pass,"Size of v_a is: ",lengthof(v_a)); + } + else { + setverdict(fail,"Size of v_a is: ",lengthof(v_a)); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_013()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn new file mode 100755 index 000000000..18cf5af17 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn @@ -0,0 +1,40 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Ensure that whitespaces and backslash character is allowed in a universal charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060101_TopLevel_014 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_014() runs on GeneralComp { + var universal charstring v_a := "ABC\ DEF"; + if (match(v_a,universal charstring:"ABC\ DEF")) + { + setverdict(pass,"v_a:",v_a); + } + else { + setverdict(fail,"v_a:",v_a); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_014()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_015.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_015.ttcn new file mode 100755 index 000000000..9d27bff82 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_015.ttcn @@ -0,0 +1,41 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.1.1, Ensure that whitespaces, control characters and backslash will be included for the universal charstring length calculation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060101_TopLevel_015 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_015() runs on GeneralComp { + var universal charstring v_a := "ABC\ DEF"; //lengthof(v_a) is 11 + + if (match(lengthof(v_a), 11)) + { + setverdict(pass,"Size of v_a is:",lengthof(v_a)); + } + else { + setverdict(fail,"Size of v_a is:",lengthof(v_a)); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_015()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_012.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_012.ttcn new file mode 100644 index 000000000..e9df01bbb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_012.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2.4, using enumerated value number integer conversion + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// enumerated values with a specific integer value assigned shall not use the associated integer + +module NegSem_060204_enumerated_type_and_values_012 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday(-1), Tuesday(1), Wednesday(2), Thursday(3), Friday(5) + }; + + testcase TC_NegSem_060204_enumerated_type_and_values_012() runs on GeneralComp { + var EDays v_enum := Friday(5); // error: shall not use the associated integer + + if (match(enum2int(v_enum),5)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_012()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_001.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_001.ttcn new file mode 100644 index 000000000..2945a1912 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_001.ttcn @@ -0,0 +1,30 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2.4, expression as user-assigned enumerated value + ** @verdict pass reject, noexecutino + ***************************************************/ + +// The following requirement is tested: +// ach enumerated value may optionally have a user-assigned integer value or non-empty list of integer literal values or ranges of integer literal values + +module NegSyn_060204_enumerated_type_and_values_001 { + + type enumerated MyFirstEnumType { + Monday, Tuesday(), Thursday, Friday + }; // error: non-empty integer literal required +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_007.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_007.ttcn new file mode 100644 index 000000000..2af1fdbc4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_007.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2.4, mixed automatic and explicit numbering of enumerated items + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +/* For each enumerated value without an assigned integer value, + the system successively associates an integer number in the textual + order of the enumerated values, starting at the left-hand side, + beginning with zero, by step 1 and skipping any number occupied by any + of the enumerated values with a manually assigned value or value list. +*/ +module Sem_060204_enumerated_type_and_values_007 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday(1), Tuesday, Wednesday, Thursday(10), Friday(11..30) + }; + + testcase TC_Sem_060204_enumerated_type_and_values_007() runs on GeneralComp { + var EDays v_day0 := Monday, v_day2 := Wednesday, v_day4 := Friday(15); + + if (enum2int(v_day0) == 1 and enum2int(v_day2) == 2 and enum2int(v_day4) == 15) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060204_enumerated_type_and_values_007()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_007.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_007.ttcn new file mode 100644 index 000000000..a4a49b10e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_007.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.5.2, Ensure that union is initialized by anytype dot notation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/*The following requirement is tested: + * AlternativeId shall resolve to the name of an alternative in the union type or + * in case of an anytype value or template AlternativeId shall resolve to a known type name + * or a known type name qualified with a module name. + */ + +module Sem_06020501_referencing_fields_of_union_type_007 { + type union MyUnionType + { + integer number, + anytype string + }; + + type component GeneralComp { + }; + + + testcase TC_Sem_06020501_referencing_fields_of_union_type_007 () runs on GeneralComp { + var MyUnionType v_mut ; + v_mut.string.integer := 3; // AlternativeID shall resolve type e.g. integer + + if (v_mut.string.integer == 3) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020501_referencing_fields_of_union_type_007()); + } +} +with { + extension "anytype integer" +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_008.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_008.ttcn new file mode 100644 index 000000000..18558454e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_008.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.5.2, Ensure that union is initialized by anytype dot notation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/*The following requirement is tested: + * AlternativeId shall resolve to the name of an alternative in the union type or + * in case of an anytype value or template AlternativeId shall resolve to a known type name + * or a known type name qualified with a module name. + */ + +module Sem_06020501_referencing_fields_of_union_type_008 { + type union MyUnionType + { + integer number, + anytype string + }; + type integer My_Int; + + type component GeneralComp { + }; + + + testcase TC_Sem_06020501_referencing_fields_of_union_type_008 () runs on GeneralComp { + var MyUnionType v_mut ; + v_mut.string.My_Int := 3; // AlternativeID shall resolve type e.g. My_Int + + if (v_mut.string.My_Int == 3) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020501_referencing_fields_of_union_type_008()); + } +} +with { + extension "anytype My_Int" +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn new file mode 100644 index 000000000..cf9b3d5a1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn @@ -0,0 +1,29 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2.7, Ensure that arrays upper value shall not be lesser than the corresponding lower value + ** @verdict pass reject + ***************************************************/ +/*The following requirement is tested: + * The upper value shall not be lesser than the corresponding lower value. + */ +module NegSyn_060207_arrays_005 { + + control { + var integer v_arr[5..1]; // error: . The upper value shall not be lesser than the corresponding lower value + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_005.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_005.ttcn new file mode 100644 index 000000000..f9eeac7bb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_005.ttcn @@ -0,0 +1,30 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ +/*The following requirement is tested: + * In case of the range syntax the upper bound shall not be lesser than the lower bound value. + */ +module NegSem_06021301_LengthSubtyping_005 { + type set length(0..10) of integer SetOfLengthLessThan10; + + type SetOfLengthLessThan10 SetOfLength5 length(5..2); + //Error: In case of the range syntax the upper bound shall not be lesser than the lower bound value. + +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_006.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_006.ttcn new file mode 100644 index 000000000..7e1e7f4d6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_006.ttcn @@ -0,0 +1,32 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ + +/*The following requirement is tested: + * In case of the range syntax the upper bound shall not be lesser than the lower bound value. +*/ + +module NegSem_06021301_LengthSubtyping_006 { + type record length(0..10) of integer RecordOfLengthLessThan10; + + type RecordOfLengthLessThan10 RecordOfLengthLessThan5 length(5..2); + //Error: In case of the range syntax the upper bound shall not be lesser than the lower bound value. + +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn new file mode 100644 index 000000000..abda24318 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn @@ -0,0 +1,37 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + *The assignment notation can be used for record, record of, set, setof and union value + * notations and for arrays. In this notation each field shall not appear more than once. +*/ + +module NegSyn_0602_TopLevel_004 { + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + const MyRecord c_rec := { + field1 := 5, + field1 := 6, // error: already appeared field + field3 := 3.14 + }; +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn new file mode 100644 index 000000000..027a250f3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The index notation can be used for record of and setof value notations and for arrays. + * In this notation each index shall not appear more than once and shall conform to the range of indices allowed by the type definition. +*/ + +module NegSyn_0602_TopLevel_005 { + + type set of integer MySetOfType; + type component GeneralComp { + } + +testcase TC_NegSyn_0602_TopLevel_005() runs on GeneralComp { + + var MySetOfType v_set := { + [0] := 1, + [1] := 2, + [1] := 3 // error already indexed + }; + + if ( match(v_set, {1,3})) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_NegSyn_0602_TopLevel_005()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn new file mode 100644 index 000000000..d8047e14d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The assignment notation can be used for record, record of, set, setof and union value + * notations and for arrays. In this notation each field shall not appear more than once. +*/ + +module NegSyn_0602_TopLevel_006 { + + type set MySetType{ + integer field1, + charstring field2 + } + + type component GeneralComp { + } + + testcase TC_NegSyn_0602_TopLevel_006() runs on GeneralComp { + + var MySetType v_set := { + field1 := 5, + field1 := 6, // error: already appeared field + field2 := "abc" + }; + + if ( match(v_set, {5,"abc"})) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_NegSyn_0602_TopLevel_006()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn new file mode 100644 index 000000000..26fc4822f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * The assignment notation can be used for record, record of, set, setof and union value + * notations and for arrays. In this notation each field shall not appear more than once. +*/ + +module NegSyn_0602_TopLevel_007 { + + type record of integer MyRecordOfType; + type component GeneralComp { + } + +testcase TC_NegSyn_0602_TopLevel_007() runs on GeneralComp { + + var MyRecordOfType v_RoI := { + [0] := 1, + [1] := 2, + [1] := 3 // error already indexed + }; + + if ( match(v_RoI, {1,3})) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_NegSyn_0602_TopLevel_007()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn index c376d1a26..032a2d10b 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn @@ -19,7 +19,7 @@ ** @verdict pass reject ***************************************************/ -module NegSem_060302_structured_types_009 { +module NegSem_060302_structured_types_009 language "TTCN-3:2016"{ type enumerated EnumeratedType {e_black, e_white}; type enumerated EnumeratedRedefinition {e_black, e_white}; diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn index a24e41526..9bcdf2492 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn @@ -14,12 +14,12 @@ * * Modified by: Adrien Kirjak * - ** @version 0.0.1 + ** @version 0.0.2 ** @purpose 1:6.3.2, Ensure that the IUT correctly handles assignments from structures having compatible types and lengths ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ -module Sem_060302_structured_types_002 language "TTCN-3:2010" { +module Sem_060302_structured_types_002 { type record RecordType { integer a, diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_003.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_003.ttcn index dfa1cd833..e9ce8ea8f 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_003.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of different runs on clauses diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_004.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_004.ttcn index 48939709d..d0bb5a70e 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_004.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of mtc and runs on clause diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_005.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_005.ttcn index 3951edfde..7d8f3ec81 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_005.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of system and runs on clause diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_006.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_006.ttcn index 9f83857ce..66cc1123a 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_006.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of different system clauses diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_003.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_003.ttcn index 806aeb432..6ff4bec2a 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_003.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of different runs on clauses diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_004.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_004.ttcn index b50cdf027..c421a7669 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_004.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of mtc and runs on clause diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_005.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_005.ttcn index 78a87b756..69dc1f8c7 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_005.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of system and runs on clause diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_006.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_006.ttcn index 3478bb139..ffd9a5d27 100644 --- a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_006.ttcn @@ -12,7 +12,7 @@ * copyright notice shall be included in all copies of whole or part of this * file and shall not imply any sub-license right. * - * Modified by: Adrien Kirjak + * Created by: Adrien Kirjak * ** @version 0.0.1 ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component compatibility of different system clauses diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001.ttcn new file mode 100644 index 000000000..68aa3da04 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.3.0.6, ensure that anytype types are only compatible with other anytype types. + ** @verdict pass reject + ***************************************************/ + +/*The following requirement is tested: + * Only anytype types that are constrained to a fixed set of types via list subtyping + * can be a potential cause for anytype incompatibility, i.e. if the set of types contained + * in type "B" does not contain the type selected in "a". +*/ + +module NegSem_060305_compatibility_of_anytype_types_001 { + + //import from NegSem_060305_compatibility_of_anytype_types_001_importB all; + //import from NegSem_060305_compatibility_of_anytype_types_001_importC all; + + type integer I (0..9); + type charstring C; + type anytype Btype; + //type anytype Btype ({float:=?},{integer:=?}); + + type component GeneralComp { + } + + + testcase TC_NegSem_060305_compatibility_of_anytype_types_001() runs on GeneralComp { + + //var NegSem_060305_compatibility_of_anytype_types_001_importB.Atype v_aa; + //var Atype v_baI ; +//:= { NegSem_060305_compatibility_of_anytype_types_001_importC.I := 1 }; + + //v_aa := v_baI; // incorrect + setverdict(pass); + } + + control { + execute(TC_NegSem_060305_compatibility_of_anytype_types_001()); + } + +} +with { + extension "anytype integer" +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importB.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importB.ttcn new file mode 100644 index 000000000..a83ddefd4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importB.ttcn @@ -0,0 +1,28 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.3.0.6, ensure that anytype types are only compatible with other anytype types. + ** @verdict pass reject + ***************************************************/ + +module NegSem_060305_compatibility_of_anytype_types_001_importB { + type integer I (0..2); + type anytype Atype ({I:=?},{integer:=?},{float:=?}); +} +with { + extension "anytype integer, float, I" +} diff --git a/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importC.ttcn b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importC.ttcn new file mode 100644 index 000000000..6c808fc6d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001_importC.ttcn @@ -0,0 +1,29 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:5.3.0.6, ensure that anytype types are only compatible with other anytype types. + ** @verdict pass reject + ***************************************************/ + +module NegSem_060305_compatibility_of_anytype_types_001_importC { + type integer I (0..2); + type float F; + type anytype Atype ({I:=?},{F:=?},{integer:=?}); +} +with { + extension "anytype I, F, integer" +} diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn index 507dfe96d..3147472e2 100644 --- a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn @@ -28,7 +28,12 @@ testcase TC_Sem_070101_ArithmeticOperators_051() runs on GeneralComp { var float v_i := -infinity; var float v_k :=2.0E0; - var float v_result := v_i * v_k; // arithmetic operator with -infinity is not allowed + var float v_result := v_i * v_k; // arithmetic operator with -infinity is allowed by IEEE 754 + + if (v_result == -infinity) + { setverdict(pass); } + else + { setverdict(fail); } setverdict(pass); diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn index cfa051bc6..28c89df35 100644 --- a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn @@ -19,14 +19,14 @@ ** @verdict pass accept, ttcn3verdict:pass *****************************************************************/ -module Sem_070101_ArithmeticOperators_051 { +module Sem_070101_ArithmeticOperators_052 { type component GeneralComp { } type integer address; -testcase TC_Sem_070101_ArithmeticOperators_051() runs on GeneralComp { +testcase TC_Sem_070101_ArithmeticOperators_052() runs on GeneralComp { var address My_address := null; diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn index 9a0f95702..9a921ba99 100644 --- a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn @@ -22,14 +22,14 @@ /* Restriction c) With the exception of the equality and non-equality operators, the special value null shall not be used as an operand of expressions (see clause 7.1.3).*/ -module Sem_070101_ArithmeticOperators_052 { +module Sem_070101_ArithmeticOperators_053 { type component GeneralComp { } type integer address; -testcase TC_Sem_070101_ArithmeticOperators_052() runs on GeneralComp { +testcase TC_Sem_070101_ArithmeticOperators_053() runs on GeneralComp { var address My_address := 1; diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn new file mode 100644 index 000000000..3a921c849 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that anytypes can be compared + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Values of the same or any two anytype types can be compared. +// For anytype values the same rule apply as to union values, with the addition that names of user-defined types defined with the same name in different modules do not denote the same type name of the selected alternatives. + +module Sem_070103_RelationalOperators_048 { + +type component GeneralComp { +} + +type anytype Atype_1; + +type anytype Atype_2; + +testcase TC_Sem_070103_RelationalOperators_048() runs on GeneralComp { + + var Atype_1 v_any1; + var Atype_2 v_any2; + + v_any1.integer := 2; + v_any2.integer := 4; + + if (v_any1.integer < v_any2.integer) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_048()); +} + +} +with { + extension "anytype integer" +} diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn new file mode 100644 index 000000000..ee570b155 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that anytypes can be compared + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Values of the same or any two anytype types can be compared. +// For anytype values the same rule apply as to union values, with the addition that names of user-defined types defined with the same name in different modules do not denote the same type name of the selected alternatives. + + +module Sem_070103_RelationalOperators_049 { + +type component GeneralComp { +} + +type anytype Atype; + +testcase TC_Sem_070103_RelationalOperators_049() runs on GeneralComp { + + var Atype v_any1; + var Atype v_any2; + + v_any1.float := 2.4; + v_any2.float := 4.2; + + if (v_any1.float < v_any2.float) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_049()); +} + +} +with { + extension "anytype float" +} diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn new file mode 100644 index 000000000..60a570716 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than or equal to operator on enumerations is evaluated correctly with differing values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +/* Two enumerated values are equal if and only if they are associated + * with the same integer value. Otherwise, they are ordered using the + * mathematical order on the associated integer values.*/ + + +module Sem_070103_RelationalOperators_050 { + +type component GeneralComp { +} + +type enumerated MyEnumType1 { + e_monday(2), e_tuesday, e_wednesday, e_thursday, e_friday +}; + +type enumerated MyEnumType2 { + e_monday(1..8), e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_050() runs on GeneralComp { + var MyEnumType1 v_first := e_monday; + var MyEnumType2 v_second := e_monday(2); + + if (match(enum2int(v_first),enum2int(v_second))) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_050()); +} + +} diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn index 77e0f4ffc..14ca927b3 100644 --- a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn @@ -20,8 +20,8 @@ ***************************************************/ // The following requirement is tested: -// Compound expressions are used for expressions of array, record, record of and -// set of types. +// Assignment or list notations are used for expressions of record, set, record of, set of, +// array, union and anytype types. module Sem_07_toplevel_002 { diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn index 517d89ce2..fe6aece78 100644 --- a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn @@ -20,8 +20,8 @@ ***************************************************/ // The following requirement is tested: -// Compound expressions are used for expressions of array, record, record of and -// set of types. +// Assignment or list notations are used for expressions of record, set, record of, set of, +// array, union and anytype types. module Sem_07_toplevel_003 { diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn index 643b844c4..abfb7a09c 100644 --- a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn @@ -20,8 +20,8 @@ ***************************************************/ // The following requirement is tested: -// Compound expressions are used for expressions of array, record, record of and -// set of types. +// Assignment or list notations are used for expressions of record, set, record of, set of, +// array, union and anytype types. module Sem_07_toplevel_004 { diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn index b9ceecee6..ea462c44b 100644 --- a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn @@ -20,8 +20,8 @@ ***************************************************/ // The following requirement is tested: -// Compound expressions are used for expressions of array, record, record of and -// set of types. +// Assignment or list notations are used for expressions of record, set, record of, set of, +// array, union and anytype types. module Sem_07_toplevel_005 { diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn new file mode 100644 index 000000000..7f08c820b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of anytype type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Assignment or list notations are used for expressions of record, set, record of, set of, array, union and anytype types. + +module Sem_07_toplevel_007 +{ + type component GeneralComp { + } + + type anytype Atype; + + type record R { + integer field1, + charstring field2 optional + } + + testcase TC_Sem_07_toplevel_007() runs on GeneralComp { + var Atype v_any; + v_any.R.field1 := 1; + v_any.R.field2 := omit; + + if (v_any.R == { field1 := 1, field2 := omit }) + { setverdict(pass); } + else + { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_007()); + } +} +with { + extension "anytype R" +} + diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn new file mode 100644 index 000000000..245b3b8e2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of union type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Assignment or list notations are used for expressions of record, set, record of, set of, array, union and anytype types. + +module Sem_07_toplevel_008 +{ + type component GeneralComp { + } + + type union U { + integer field1, + charstring field2 + } + + testcase TC_Sem_07_toplevel_008() runs on GeneralComp { + var U v_union := { field2 := "abc" }; + + if (v_union == {field2 := "abc" }) { setverdict(pass); } + else { setverdict(fail,v_union); } + } + + control { + execute(TC_Sem_07_toplevel_008()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn new file mode 100644 index 000000000..6a620bf18 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of set type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Assignment or list notations are used for expressions of record, set, record of, set of, +// array, union and anytype types. + +module Sem_07_toplevel_009 +{ + type component GeneralComp { + } + + type set SI + { + integer field1, + integer field2 + }; + + testcase TC_Sem_07_toplevel_009() runs on GeneralComp { + var SI v_set; + v_set.field1 := 1; + v_set.field2 := 2; + if (match(v_set,{ field1 := 1, field2 := 2 })) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_009()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn new file mode 100644 index 000000000..060b8ecff --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn @@ -0,0 +1,24 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with ed4.8.1 language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_010 language "TTCN-3:2016" { + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn new file mode 100644 index 000000000..9fd8753bb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a port, default or component types cannot be module parameters. + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +/* Restriction B: Module parameters shall not be of port type, + * default type or component type and shall not be of a structured type that contains a sub-element of + * port type at any level of nesting.*/ + +module NegSem_080201_ModuleParameters_001 { + + type port MyMessagePortType message { + inout integer + } with {extension "internal"} + + modulepar MyMessagePortType MY_PORT; // not allowed + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_001() runs on GeneralComp { + if (MY_PORT.checkstate("Started")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_001()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn new file mode 100644 index 000000000..c53228b74 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a port, default or component types cannot be module parameters. + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +/* Restriction B: Module parameters shall not be of port type, + * default type or component type and shall not be of a structured type that contains a sub-element of + * port type at any level of nesting.*/ + +module NegSem_080201_ModuleParameters_002 { + + type port MyMessagePortType message{ + inout integer + } with {extension "internal"} + + type component MyComponentType { + port MyMessagePortType pCO1; + } + + modulepar MyComponentType MY_COMP; // not allowed + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_002() runs on GeneralComp { + + if (MY_COMP.running) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_002()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn new file mode 100644 index 000000000..4d8798313 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a port, default or component types cannot be module parameters. + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +/* Restriction B: Module parameters shall not be of port type, + * default type or component type and shall not be of a structured type that contains a sub-element of + * port type at any level of nesting.*/ + +module NegSem_080201_ModuleParameters_003 { + + modulepar default MY_DEF := null; // not allowed + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_003() runs on GeneralComp { + + if (MY_DEF == null) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_003()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn new file mode 100644 index 000000000..139fd8e86 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that module parameters remain constant. + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +/* Restriction B: Module parameters shall not be of port type, + * default type or component type and shall not be of a structured type that contains a sub-element of + * port type at any level of nesting.*/ + +module NegSem_080201_ModuleParameters_004 { + + modulepar integer MY_INT := 2; + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_004() runs on GeneralComp { + MY_INT := 3; // not allowed to change module parameter + if (MY_INT == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_004()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn new file mode 100644 index 000000000..71e38763f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a reference to plain module parameter with a default value delivers the default value unless it is overwritten. + ** @verdict pass reject + *****************************************************************/ +// A module parameter shall only be of type address if the address type is explicitly defined within the associated module + +module NegSem_080201_ModuleParameters_005 { + + modulepar address MY_ADDRESS_MODULE_PARAMETER := 2; // error: address type not defined + + type component GeneralComp { + } + + testcase TC_NegSem_080201_ModuleParameters_005() runs on GeneralComp { + if (MY_ADDRESS_MODULE_PARAMETER == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_005()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn new file mode 100644 index 000000000..14f57b4a4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that a module parameter is not allowed to be used in arrays + ** @verdict pass reject + *****************************************************************/ +//Module parameters shall not be used in type or array definitions. + +module NegSem_080201_ModuleParameters_006 { + + modulepar integer MY_INT_MODULE_PARAMETER := 2; + + type component GeneralComp { + } + + type integer MyArrayType[MY_INT_MODULE_PARAMETER]; + // error: Module parameters shall not be used in type or array definitions. + + testcase TC_NegSem_080201_ModuleParameters_006() runs on GeneralComp { + + var MyArrayType v_arr := {2,3}; + + if (v_arr[0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_080201_ModuleParameters_006()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn new file mode 100644 index 000000000..2ef5c8b98 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn @@ -0,0 +1,35 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that module parameter can be declared within the module definition part only. + ** @verdict pass reject, noexecution + *****************************************************************/ +module NegSyn_080201_ModuleParameters_001 { + + type component GeneralComp { + } + + testcase TC_NegSyn_080201_ModuleParameters_001() runs on GeneralComp { + modulepar integer MY_MODULE_PAR := 1; // not allowed to declared here + setverdict(fail); + } + + control { + execute(TC_NegSyn_080201_ModuleParameters_001()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn new file mode 100644 index 000000000..8928e77fc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn @@ -0,0 +1,36 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that module parameter can be declared within the module definition part only. + ** @verdict pass reject, noexecution + *****************************************************************/ +module NegSyn_080201_ModuleParameters_002 { + modulepar integer MY_MODULE_PAR := 1; + modulepar integer MY_MODULE_PAR := 2; //error: not allowed to redeclare + + type component GeneralComp { + } + + testcase TC_NegSyn_080201_ModuleParameters_002() runs on GeneralComp { + setverdict(fail); + } + + control { + execute(TC_NegSyn_080201_ModuleParameters_002()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn b/conformance_test/core_language_tests/positive_tests/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn index 9773bb05d..22d9ff5e4 100644 --- a/conformance_test/core_language_tests/positive_tests/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn @@ -19,7 +19,7 @@ ** @verdict pass reject ***************************************************/ -/*NOTE: see Figure 7(f): connection of two TSI ports is not allowed +/*NOTE: see Figure 7(g): connection of an already mapped port is not allowed * */ module NegSem_0901_Communication_ports_002{ diff --git a/conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn b/conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn new file mode 100755 index 000000000..c525681ca --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn @@ -0,0 +1,37 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:11.1, Variables should be assigned only by initialized variables + ** @verdict pass reject + ***************************************************/ + +// The expression shall evaluate to a value, which is at least partially initialized. + +module NegSem_1101_ValueVars_005 { + type component GeneralComp {} + + testcase TC_NegSem_1101_ValueVars_005() runs on GeneralComp { + var integer v_i; + var integer v_j := v_i + 2; // error: v_i is uninitialized + + setverdict(pass); + } + + control { + execute(TC_NegSem_1101_ValueVars_005()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn b/conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn new file mode 100644 index 000000000..853dc95e2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:11.1, Variables should be assigned only by values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//formerly: NegSem_1101_ValueVars_006 + +module Sem_1101_ValueVars_006 { + type component GeneralComp {} + + testcase TC_Sem_1101_ValueVars_006() runs on GeneralComp { + var integer v_i := 1; + var @lazy integer v_j := v_i + 2; + + v_i := v_j; + + if(v_i == 3){ + setverdict(pass); + } + else{ + setverdict(fail); + } + + + } + + control { + execute(TC_Sem_1101_ValueVars_006()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn b/conformance_test/core_language_tests/positive_tests/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn new file mode 100644 index 000000000..3a2ce6c39 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn @@ -0,0 +1,39 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:11.2, Template variables should be assigned with unitialized variables + ** @verdict pass reject + ***************************************************/ + +/* The following requirements are tested: +Restriction l) The template body at the right-hand side of the assignment symbol shall evaluate to a value or template, which is type compatible with the variable being declared. +*/ + +module NegSyn_1102_TemplateVars_002 { + type component GeneralComp {} + + testcase TC_NegSyn_1102_TemplateVars_002() runs on GeneralComp { + var integer v_i1 := 1; + var template float v_i2 := v_i1; // error: v_i1 is integer, meanwhile template type is float + + setverdict(pass); + } + + control { + execute(TC_NegSyn_1102_TemplateVars_002()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001_new.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001_new.ttcn new file mode 100644 index 000000000..35d84361e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001_new.ttcn @@ -0,0 +1,92 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.6.4, Test modification of signature parameters. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150604_ReferencingSignatureParameters_001_new { + +/** + * @desc testing of inline return template for remote procedure call + * @param p_par1 only input parameter + * @param p_par2 must have value 4 at return + * @param p_par3 must have value 5 at return + * @return must return value 1 + */ + +signature p_Sem_150604_ReferencingSignatureParameters_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + +template p_Sem_150604_ReferencingSignatureParameters_001 s_baseTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := ? +} + +template p_Sem_150604_ReferencingSignatureParameters_001 s_returnTemplate modifies s_baseTemplate := { + p_par3 := 5 +} + +template p_Sem_150604_ReferencingSignatureParameters_001 s_wrongTemplate modifies s_baseTemplate := { + p_par3 := 3 +} + +template p_Sem_150604_ReferencingSignatureParameters_001 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 +} + + type port remotePort procedure { + inout p_Sem_150604_ReferencingSignatureParameters_001; + } + +type component GeneralComp { + port remotePort PCO; +} + +function f_ptcBehaviour() runs on GeneralComp { + PCO.getcall(p_Sem_150604_ReferencingSignatureParameters_001:?); + PCO.reply(p_Sem_150604_ReferencingSignatureParameters_001:{-, 4, 5} value 1); +} + +testcase TC_Sem_150604_ReferencingSignatureParameters_001_new() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect (self:PCO, v_ptc:PCO); + v_ptc.start(f_ptcBehaviour()); + PCO.call(p_Sem_150604_ReferencingSignatureParameters_001:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_150604_ReferencingSignatureParameters_001:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_150604_ReferencingSignatureParameters_001:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_150604_ReferencingSignatureParameters_001:s_returnTemplate value 1) { //check that procedure is returning correct values + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_150604_ReferencingSignatureParameters_001_new()); +} + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn index 7c12ea250..3e1f35651 100644 --- a/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn @@ -39,7 +39,7 @@ module NegSem_1508_TemplateRestrictions_036 { if (valueof(m_baseTemplate.b) == true) { setverdict(pass); } else { - setverdict(fail); + setverdict(fail, valueof(m_baseTemplate.b)); } } diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_043.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_043.ttcn index fef122082..728845683 100644 --- a/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_043.ttcn +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_043.ttcn @@ -15,7 +15,7 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:15.8, Ensure that template(present) can be parameter to template(omit) + ** @purpose 1:15.8, Ensure that template cannot be parameter to template(omit) ** @verdict pass reject *****************************************************************/ diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn new file mode 100644 index 000000000..0ec422f11 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation refuses not initialized operands. + ** @verdict pass reject + *****************************************************************/ + +// Restriction b) The operands of the match operation shall be completely initialized. + +module NegSem_1509_MatchOperation_002 { + + type component GeneralComp { } + + template integer m_lessThan10 := (-infinity..9); + + testcase TC_NegSem_1509_MatchOperation_002() runs on GeneralComp { + + var integer v_value; + + if (match(v_value, m_lessThan10)) { // error: The operands of the match operation shall be completely initialized. + setverdict(pass); + } else { + setverdict(fail,"Reason: ", v_value); + } + } + + control{ + execute(TC_NegSem_1509_MatchOperation_002()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn new file mode 100644 index 000000000..a016f81e9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly with enums. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1509_MatchOperation_003 { + + type component GeneralComp { } + + type enumerated A_enum { A, B, C, D, E }; + type enumerated B_enum { A, F, G }; + + testcase TC_NegSem_1509_MatchOperation_003() runs on GeneralComp { + + var A_enum v_value := A; + + + if (match(v_value, B_enum:G)) { // error: different enum type + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1509_MatchOperation_003()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn new file mode 100644 index 000000000..9b99cbcc1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that matching a value expression against a template instance which evaluates to the omit matching mechanism shall return false. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_011 { + + type component GeneralComp { } + + type set MySet { + charstring field1, + boolean field2 optional + } + + template MySet mw_receiveTemplate := { + field1 := pattern "ab*de", + field2 := omit + } + + testcase TC_Sem_1509_MatchOperation_011() runs on GeneralComp { + var MySet v_value := { + field1 := "abcde", + field2 := true + } + + if (match(v_value, mw_receiveTemplate)) { + setverdict(fail); + } else { + setverdict(pass); + } + } + + control{ + execute(TC_Sem_1509_MatchOperation_011()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn new file mode 100644 index 000000000..c0d233a3b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that if the expression-parameter evaluates to a literal value without explicit or implicit identification of its type, the type of the template instance-parameter shall be used as the type governor for the expression-parameter. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// Restriction C: If the expression-parameter evaluates to a literal value without explicit or implicit identification of its type, the type of the template instance-parameter shall be used as the type governor for the expression-parameter. + + +module Sem_1509_MatchOperation_012 { + + type component GeneralComp { } + + template integer m_lessThan10 := (-infinity..9); + + testcase TC_Sem_1509_MatchOperation_012() runs on GeneralComp { + + if (match(-20, m_lessThan10)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1509_MatchOperation_012()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn new file mode 100644 index 000000000..6f7a29fe1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that if the expression-parameter evaluates to a literal value without explicit or implicit identification of its type, the type of the template instance-parameter shall be used as the type governor for the expression-parameter. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// Restriction C: If the expression-parameter evaluates to a literal value without explicit or implicit identification of its type, the type of the template instance-parameter shall be used as the type governor for the expression-parameter. + + +module Sem_1509_MatchOperation_013 { + + type component GeneralComp { } + + const integer c_value := 1; + + testcase TC_Sem_1509_MatchOperation_013() runs on GeneralComp { + + if (match(c_value,*)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1509_MatchOperation_013()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn new file mode 100644 index 000000000..3bc976839 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly with enums. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_014 { + + type component GeneralComp { } + + type enumerated A_enum { A, B, C, D, E }; + type enumerated B_enum { A, F, G }; + + testcase TC_Sem_1509_MatchOperation_014() runs on GeneralComp { + + var A_enum v_value := A; + + if (match(v_value, B_enum:G)) { + setverdict(fail); + } else { + setverdict(pass); + } + } + + control{ + execute(TC_Sem_1509_MatchOperation_014()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn new file mode 100644 index 000000000..e0dedd7f6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly with enums. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_015 { + +type component GeneralComp { } + + type enumerated A_enum { A, B, C, D, E }; + type enumerated B_enum { A, F, G }; + + testcase TC_Sem_1509_MatchOperation_015() runs on GeneralComp { + + var A_enum v_value := A; + + if (match(A,v_value)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1509_MatchOperation_015()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn new file mode 100644 index 000000000..440f10e98 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly with enums. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_016 { + + type component GeneralComp { } + + type enumerated A_enum { A, B, C, D, E }; + type enumerated B_enum { A, F, G }; + + testcase TC_Sem_1509_MatchOperation_016() runs on GeneralComp { + + var A_enum v_value := A; + + if (match(B,v_value)) { + setverdict(fail); + } else { + setverdict(pass); + } + } + + control{ + execute(TC_Sem_1509_MatchOperation_016()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn new file mode 100644 index 000000000..b226378e4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenations of record of charstrings work when parameterized. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015 { + + type component GeneralComp { } + + type record of charstring RecOfChar; + + template RecOfChar m_myRec_par(integer p_num) := {"ABC"} & ? & * length(p_num) & {"EF"}; + + testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015() runs on GeneralComp { + var integer v_int := 3; + var template RecOfChar v_recofChar; + v_recofChar :={ "ABC" } & { "Z" } & { "Z" } & { "Z" } & { "EF" }; + + if (match(valueof(v_recofChar), m_myRec_par(2))) { + setverdict(pass); + } else { + setverdict(fail); + } + + } + + control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn b/conformance_test/core_language_tests/positive_tests/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn new file mode 100644 index 000000000..c207f42cd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn @@ -0,0 +1,35 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:15, Ensure that the expression or template body initializing a template shall evaluate to a value or template, which is type compatible with the template being declared. + ** @verdict pass reject, noexecution + *****************************************************************/ + +// The following requirement is tested: +//Restriction C: the expression or template body initializing a template shall evaluate to a value or template, which is type compatible with the template being declared. + +module NegSyn_15_TopLevel_001 { + + type record MyRecord { + integer myInt + } + + template MyRecord mw_myRecord := { + myInt := 2.1 // error: incompatible type (int req., float is given) + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn new file mode 100755 index 000000000..c0a0833f7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Ensure that integer value of an enum handled correctly + +module NegSem_160102_predefined_functions_039 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday(3..5) + }; + + testcase TC_NegSem_160102_predefined_functions_039() runs on GeneralComp { + var EDays v_enum := Friday(3); + int2enum(6,v_enum); // error: not allowed value + + if (match(enum2int(v_enum),6)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_160102_predefined_functions_039()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn new file mode 100755 index 000000000..4fea1d573 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Ensure that integer value of an enum handled correctly + +module NegSem_160102_predefined_functions_040 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday(-1), Tuesday(1), Wednesday(2), Thursday(3), Friday(3..5) // error + }; + + testcase TC_NegSem_160102_predefined_functions_040() runs on GeneralComp { + var EDays v_enum := Wednesday; + int2enum(3,v_enum); // value already occupied + + if (match(enum2int(v_enum),2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_160102_predefined_functions_040()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn new file mode 100755 index 000000000..c17fbd884 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn @@ -0,0 +1,44 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C.3.5) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_160102_predefined_functions_062 { + + type component GeneralComp { + } + + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_062() runs on GeneralComp { + var template MyRecofInt v_1 := {1,2,3,4,5}; // specific value of integer type + var template bitstring enc := decmatch v_1; //encoded template + + if (match(istemplatekind(enc, "decmatch"), true)) { + setverdict(pass, "decmatch: ", istemplatekind(enc, "decmatch")); + } else { + setverdict(fail, "decmatch: ", istemplatekind(enc, "decmatch"), "; expected result: true"); + } + + } + + control { + execute(TC_Sem_160102_predefined_functions_062()); + } +} with { encode "RAW"} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn new file mode 100755 index 000000000..0d5f7eb85 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Ensure that integer value of an enum handled correctly + +module Sem_160102_predefined_functions_093 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday(3..5) + }; + + testcase TC_Sem_160102_predefined_functions_093() runs on GeneralComp { + var EDays v_enum := Thursday; + + int2enum(4,v_enum); // new value for v_enum is Friday(4) + + if (match(enum2int(v_enum),4) and match(v_enum,Friday(4))) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_160102_predefined_functions_093()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn new file mode 100755 index 000000000..27608326c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Ensure that integer value of an enum handled correctly + +module Sem_160102_predefined_functions_094 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday(3..5) + }; + + testcase TC_Sem_160102_predefined_functions_094 () runs on GeneralComp { + var EDays v_enum := Friday(3); + var integer v_day := enum2int(v_enum); + + if (match(v_day,3)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_160102_predefined_functions_094 ()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn new file mode 100755 index 000000000..d24f2eaf0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// The following requirements are tested: Using ischosen for anytype + +module Sem_160102_predefined_functions_095 { + type union U { integer f1, octetstring f2 } + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_095 () runs on GeneralComp { + template U m_u4 := ({ f1 := 2 }, {f2 := 'AB'O }); + template anytype mw_anytype := { U := m_u4 } + var boolean v_i; + + v_i := ischosen(mw_anytype.U); //function returns true value + if(match(v_i,true)) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } + } + + control{ + + execute(TC_Sem_160102_predefined_functions_095()); + + } + +} +with { + extension "anytype U" +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn new file mode 100755 index 000000000..5de17113d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// The following requirements are tested: Using ischosen for anytype + +module Sem_160102_predefined_functions_096 { + + type component GeneralComp { + } + + type union U { integer f1, charstring f2 }; + + testcase TC_Sem_160102_predefined_functions_096 () runs on GeneralComp { + + var U chosen := { f1 := 1 }; + template anytype mw_anytype := { U := chosen }; + var boolean v_i, v_j; + + v_i := ischosen(mw_anytype.integer); //function returns false + + if(match(v_i,false)) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected result for ischosen()"); + } + } + + control{ + + execute(TC_Sem_160102_predefined_functions_096()); + + } + +} +with { + extension "anytype U, integer" +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn new file mode 100755 index 000000000..93341968b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// The following requirements are tested: +// The optional decoding_info parameter is used for passing additional encoding information to the codec and, if it is omitted, no additional information is sent to the codec. + +module Sem_160102_predefined_functions_097 { + + type component GeneralComp { + } + + type integer I with { variant "32 bit"}; + + testcase TC_Sem_160102_predefined_functions_097() runs on GeneralComp { + var I v_test := 23424; + var bitstring v_enc := encvalue(v_test, "encoding_info_text"); + + if (match(decvalue(v_enc,v_test,"decoding_info_text"), 0)){ + setverdict(pass,v_test); + } else { + setverdict(fail, "Invalid encoding length"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_097()); + } + +} with { encode "RAW" } diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn new file mode 100755 index 000000000..d35248fe6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined encvalue_unichar function works properly in case of encoding universal charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * The optional encoding_info parameter is used for passing additional encoding information to the codec and, + * if it is omitted, no additional information is sent to the codec.*/ + + +module Sem_160102_predefined_functions_098 { + + type component GeneralComp { + } + + type charstring CH with { variant ""}; + + testcase TC_Sem_160102_predefined_functions_098 () runs on GeneralComp { + + var CH v_test := "abc"; + + //Encoding: + var universal charstring v_test_enc_8 := encvalue_unichar(v_test,"UTF-8", "encoding_info_text"); + //encode to universal charstring UTF-8 + + setverdict(pass,"Encoded value: ", v_test_enc_8); + } + + control{ + execute(TC_Sem_160102_predefined_functions_098()); + } + +} with { encode "RAW" } diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn new file mode 100755 index 000000000..bd8aa3744 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined encvalue_unichar function works properly in case of encoding universal charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * The optional decoding_info parameter is used for passing additional encoding information to the codec and, + * if it is omitted, no additional information is sent to the codec.*/ + +module Sem_160102_predefined_functions_099 { + + type component GeneralComp { + + } + + type charstring CH with { variant ""}; + + testcase TC_Sem_160102_predefined_functions_099 () runs on GeneralComp { + + var CH v_test := "abc"; + + //Encoding: + var universal charstring v_test_enc_8 := encvalue_unichar(v_test,"UTF-8", "encoding_info_text"); + //encode to universal charstring UTF-8 + + //Decoding: + var CH v_test_dec; + var integer v_res:= decvalue_unichar(v_test_enc_8,v_test_dec,"UTF-8", "encoding_info_text"); //decode (UTF-8) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_test_enc_8 , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_test_enc_8 , " with result ", v_res); + } + + } + + control{ + execute(TC_Sem_160102_predefined_functions_099()); + } + +} with { encode "RAW" } diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn new file mode 100644 index 000000000..1c799353c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the create operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_005 { + + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var GeneralComp v_ptc := GeneralComp.create; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_005() runs on GeneralComp system GeneralComp + { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_005()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn new file mode 100644 index 000000000..94a769f62 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.start operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_006 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.start(f_ptcBehaviour()); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_006() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy integer mw_test := f_test(v_ptc); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_006()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn new file mode 100644 index 000000000..07c00f461 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.stop operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_007 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_007() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create alive; + template @fuzzy integer mw_test := f_test(v_ptc); + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_007()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn new file mode 100644 index 000000000..280211be5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the kill operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_008 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.kill; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + template @fuzzy integer mw_test := f_test(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_008()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn new file mode 100644 index 000000000..ec0537a71 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.running operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_009 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.running) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy integer mw_test := f_test(v_ptc); + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_009()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn new file mode 100644 index 000000000..b53b836bf --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the alive operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_010 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.alive) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy integer mw_test := f_test(v_ptc); + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_010()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn new file mode 100644 index 000000000..740816ab6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the done operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_011 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.done; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy integer mw_test := f_test(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_011()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn new file mode 100644 index 000000000..5b73e7693 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the killed operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_012 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.killed; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_012() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + template @fuzzy integer mw_test := f_test(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_012()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn new file mode 100644 index 000000000..76b5efd66 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.start operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_013 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.start; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_013() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_013()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn new file mode 100644 index 000000000..675f43a24 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.stop operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_014 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_014() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.start; //stop + p.send(1); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_014()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn new file mode 100644 index 000000000..4a18da84c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the halt operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_015 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.halt; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_015() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.start; //halt + p.send(1); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_015()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn new file mode 100644 index 000000000..fe64be424 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the clear operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_016 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.clear; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_016() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_016()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn new file mode 100644 index 000000000..578b88f74 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the checkstate operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_017 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (p.checkstate("Started")) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_017() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_017()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn new file mode 100644 index 000000000..bbb4c5add --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the send operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_018 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.send(2); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_018() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + template @fuzzy integer mw_test := f_test(); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_018()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn new file mode 100644 index 000000000..481ec71b4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the receive operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_019 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.receive(integer:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_019() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + template @fuzzy integer mw_test := f_test(); + p.send(1); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_019()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn new file mode 100644 index 000000000..9cc6a4bac --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the trigger operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_020 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.trigger(integer:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_020() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + template @fuzzy integer mw_test := f_test(); + p.send(1); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_020()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn new file mode 100644 index 000000000..ae77e86a9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the call operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_021 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return template integer { + psig.call(S:{}, nowait); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_021() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy integer mw_test := f_test(); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_021()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn new file mode 100644 index 000000000..d02cf97b9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getcall operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_022 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.getcall(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_022() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy integer mw_test := f_test(); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_022()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn new file mode 100644 index 000000000..ad06736de --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the reply operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_023 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.reply(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_023() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy integer mw_test := f_test(); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_023()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn new file mode 100644 index 000000000..ddf1ffecd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getreply operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_024 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return template integer { + psig.getreply(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_024() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy integer mw_test := f_test(); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_024()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn new file mode 100644 index 000000000..c1250b89c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the raise operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_025 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.raise(S, "UserException"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_025() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy integer mw_test := f_test(); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_025()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn new file mode 100644 index 000000000..359caa13a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the catch operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_026 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return template integer { + psig.catch(S, charstring:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_026() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy integer mw_test := f_test(); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_026()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn new file mode 100644 index 000000000..e4d967743 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the check operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_027 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.check; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_027() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_027()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn new file mode 100644 index 000000000..776eed0f0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the connect operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_028 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + connect(mtc:p, mtc:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_028() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_028()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn new file mode 100644 index 000000000..eb110c38c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the disconnect operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_029 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + disconnect(mtc:p, mtc:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_029() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_029()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn new file mode 100644 index 000000000..eec1ce595 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the map operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_030 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + map(mtc:p, system:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_030() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + unmap(mtc:p, system:p); //connect >< map + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_030()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn new file mode 100644 index 000000000..40e3134ae --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the unmap operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_031 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + unmap(mtc:p, system:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_031() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_031()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn new file mode 100644 index 000000000..87d7431fa --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the action operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// c) The action operation (see notes 2 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_032 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + action("My action"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_032() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_032()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn new file mode 100644 index 000000000..44beb3164 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.start operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_033 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.start; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_033() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_033()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn new file mode 100644 index 000000000..8222511d9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.stop operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_034 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_034() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_034()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn new file mode 100644 index 000000000..c7094fb59 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.running operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_035 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.running) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_035() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_035()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn new file mode 100644 index 000000000..e9d16c98c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the read operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_036 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.read > 0.0) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_036() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_036()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn new file mode 100644 index 000000000..d567ee637 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timeout operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_037 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.timeout; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_037() runs on GeneralComp system GeneralComp { + tc_tmr.start; + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_037()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn new file mode 100644 index 000000000..d2629f684 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a non-deterministic external function call cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// e) Calling non-deterministic external functions, i.e. external functions where the resulting values for actual +// inout or out parameters or the return value may differ for different invocations with the same actual in and +// inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_038 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_038() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_038()) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_038() runs on GeneralComp system GeneralComp + { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_038()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn new file mode 100644 index 000000000..e63a6bcd1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the predefined rnd function cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// f) Calling the rnd predefined function (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_039 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (rnd() > 0.5) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_039() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_039()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn new file mode 100644 index 000000000..031cdc5a9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an assignment of a component variable (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_040 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return template integer { + vc_int := 1; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_040() runs on GeneralComp system GeneralComp + { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_040()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn new file mode 100644 index 000000000..5ee088958 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual out parameter (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_041 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_out(vc_int); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_041() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_041()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn new file mode 100644 index 000000000..433ac8b3b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual inout parameter (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_042 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_inout(vc_int); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_042() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_042()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn new file mode 100644 index 000000000..2b02df2e4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the setverdict operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// h) Calling the setverdict operation (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_043 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + setverdict(pass); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_043() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_043()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn new file mode 100644 index 000000000..cc6e09b5a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the activate operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_044 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + activate(a_anyTimer()); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_044() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_044()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn new file mode 100644 index 000000000..d341492c8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the deactivate operation cannot be used in a function called during receiving operation (in templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_045 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + deactivate; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_045() runs on GeneralComp system GeneralComp { + template @fuzzy integer mw_test := f_test(); + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_045()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn new file mode 100644 index 000000000..2282fc6ea --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the create operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_046 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var GeneralComp v_ptc := GeneralComp.create; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_046() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_046()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn new file mode 100644 index 000000000..e2188a581 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.start operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_047 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.start(f_ptcBehaviour()); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_047() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy R mw_test := { field1 := f_test(v_ptc) }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_047()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn new file mode 100644 index 000000000..a6cd11c3b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.stop operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_048 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_048() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + template @fuzzy R mw_test := { field1 := f_test(v_ptc) }; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_048()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn new file mode 100644 index 000000000..322254d67 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the kill operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_049 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.kill; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_049() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + template @fuzzy R mw_test := { field1 := f_test(v_ptc) }; + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_049()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn new file mode 100644 index 000000000..9e3ef6ad0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.running operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_050 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.running) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_050() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy R mw_test := { field1 := f_test(v_ptc) }; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_050()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn new file mode 100644 index 000000000..39a31f7c9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the alive operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_051 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.alive) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_051() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy R mw_test := { field1 := f_test(v_ptc) }; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_051()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn new file mode 100644 index 000000000..d676c7fe6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the done operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_052 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.done; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_052() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy R mw_test := { field1 := f_test(v_ptc) }; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_052()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn new file mode 100644 index 000000000..5a7061089 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the killed operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_053 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.killed; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_053() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + template @fuzzy R mw_test := { field1 := f_test(v_ptc) }; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_053()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn new file mode 100644 index 000000000..f6d918fe8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.start operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_054 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.start; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_054() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_054()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn new file mode 100644 index 000000000..64d33b3c0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.stop operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_055 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_055() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + timer t_tmr := 0.1; + t_tmr.start; + p.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_055()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn new file mode 100644 index 000000000..e1667b88c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the halt operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_056 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.halt; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_056() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + timer t_tmr := 0.1; + t_tmr.start; + p.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_056()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn new file mode 100644 index 000000000..fd40a732e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the clear operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_057 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.clear; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_057() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(mw_test) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_057()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn new file mode 100644 index 000000000..c7257d421 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the checkstate operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_058 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (p.checkstate("Started")) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_058() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_058()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn new file mode 100644 index 000000000..97a5a945d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the send operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_059 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.send(R:{ field1 := 2 }); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_059() runs on GeneralComp system GeneralComp + { + connect(mtc:p, mtc:p); + template @fuzzy R mw_test := { field1 := f_test() }; + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_059()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn new file mode 100644 index 000000000..b381822f3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the receive operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_060 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.receive(R:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_060() runs on GeneralComp system GeneralComp + { + connect(mtc:p, mtc:p); + template @fuzzy R mw_test := { field1 := f_test() }; + p.send(R:{ field1 := 1 }); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_060()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn new file mode 100644 index 000000000..2170e0606 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the trigger operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_061 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.trigger(R:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_061() runs on GeneralComp system GeneralComp + { + connect(mtc:p, mtc:p); + template @fuzzy R mw_test := { field1 := f_test() }; + p.send(R:{ field1 := 1 }); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_061()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn new file mode 100644 index 000000000..ebde72577 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the call operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_062 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return template integer { + psig.call(S:{}, nowait); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_062() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy R mw_test := { field1 := f_test() }; + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_062()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn new file mode 100644 index 000000000..1422ac374 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getcall operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_063 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.getcall(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_063() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy R mw_test := { field1 := f_test() }; + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_063()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn new file mode 100644 index 000000000..4c02b9306 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the reply operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_064 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.reply(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_064() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy R mw_test := { field1 := f_test() }; + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + psig.getcall(S:{}); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_064()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn new file mode 100644 index 000000000..24e882780 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn @@ -0,0 +1,78 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getreply operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_065 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return template integer { + psig.getreply(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_065() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy R mw_test := { field1 := f_test() }; + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_065()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn new file mode 100644 index 000000000..8bfb4e542 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the raise operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_066 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.raise(S, "UserException"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_066() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy R mw_test := { field1 := f_test() }; + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + psig.getcall(S:{}); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_066()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn new file mode 100644 index 000000000..37692f768 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn @@ -0,0 +1,78 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the catch operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_067 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return template integer { + psig.catch(S, charstring:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_067() runs on GeneralComp system GeneralComp + { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + template @fuzzy R mw_test := { field1 := f_test() }; + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_067()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn new file mode 100644 index 000000000..7b02b7d6c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the check operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_068 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.check; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_068() runs on GeneralComp system GeneralComp + { + connect(mtc:p, mtc:p); + template @fuzzy R mw_test := { field1 := f_test() }; + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_068()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn new file mode 100644 index 000000000..77b74c393 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the connect operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_069 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + connect(mtc:p, mtc:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_069() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_069()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn new file mode 100644 index 000000000..ec5e56b6a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the disconnect operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_070 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + disconnect(mtc:p, mtc:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_070() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_070()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn new file mode 100644 index 000000000..ec6c104d9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the map operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_071 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + map(mtc:p, system:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_071() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + unmap(mtc:p, system:p); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + disconnect(mtc:p, mtc:p); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_071()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn new file mode 100644 index 000000000..8376c57bb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the unmap operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_072 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + unmap(mtc:p, system:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_072() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_072()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn new file mode 100644 index 000000000..3a36115bd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the action operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// c) The action operation (see notes 2 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_073 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + action("My action"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_073() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_073()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn new file mode 100644 index 000000000..04a73f9aa --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.start operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_074 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.start; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_074() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_074()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn new file mode 100644 index 000000000..f2e690998 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.stop operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_075 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_075() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_075()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn new file mode 100644 index 000000000..8c4d19fb5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.running operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_076 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.running) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_076() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_076()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn new file mode 100644 index 000000000..037e90ae5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the read operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_077 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.read > 0.0) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_077() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_077()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn new file mode 100644 index 000000000..5fde0e66b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timeout operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_078 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.timeout; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_078() runs on GeneralComp system GeneralComp + { + tc_tmr.start; + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_078()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn new file mode 100644 index 000000000..4f4538616 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a non-deterministic external function call cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// e) Calling non-deterministic external functions, i.e. external functions where the resulting values for actual +// inout or out parameters or the return value may differ for different invocations with the same actual in and +// inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_079 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_079() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_079()) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_079() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_079()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn new file mode 100644 index 000000000..328eb18ef --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the predefined rnd function cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// f) Calling the rnd predefined function (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_080 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (rnd() > 0.5) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_080() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_080()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn new file mode 100644 index 000000000..689f138ad --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an assignment of a component variable (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_081 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return template integer { + vc_int := 1; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_081() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_081()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn new file mode 100644 index 000000000..02f950ad6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual out parameter (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_082 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_out(vc_int); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_082() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_082()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn new file mode 100644 index 000000000..172c2431d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual inout parameter (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_083 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_inout(vc_int); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_083() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_083()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn new file mode 100644 index 000000000..64cec6a94 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the setverdict operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// h) Calling the setverdict operation (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_084 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + setverdict(pass); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_084() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_084()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn new file mode 100644 index 000000000..3a471d492 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the activate operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_085 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + activate(a_anyTimer()); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_085() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_085()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn new file mode 100644 index 000000000..2bd1fedc4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the deactivate operation cannot be used in a function called during receiving operation (in template fields) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_086 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + deactivate; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_086() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_086()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn new file mode 100644 index 000000000..4e0c667b6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the create operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_087 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var GeneralComp v_ptc := GeneralComp.create; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_087() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_087()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn new file mode 100644 index 000000000..a1be7a150 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.start operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_088 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.start(f_ptcBehaviour()); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_088() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_ptc) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_088()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn new file mode 100644 index 000000000..984a05a10 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.stop operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_089 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_089() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_ptc) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_089()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn new file mode 100644 index 000000000..d344810b2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the kill operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_090 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.kill; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_090() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_ptc) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_090()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn new file mode 100644 index 000000000..1fcd9e7f2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.running operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_091 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.running) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_091() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_ptc) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_091()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn new file mode 100644 index 000000000..d28c3934b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the alive operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_092 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.alive) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_092() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_ptc) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_092()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn new file mode 100644 index 000000000..a7aff3e83 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the done operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_093 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.done; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_093() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_ptc) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_093()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn new file mode 100644 index 000000000..5c1a02c73 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the killed operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_094 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.killed; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_094() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_ptc) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_094()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn new file mode 100644 index 000000000..d15387b76 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.start operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_095 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.start; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_095() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(R:{ field1 := f_test() }) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_095()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn new file mode 100644 index 000000000..3eca6e09d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.stop operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_096 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_096() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(R:{ field1 := f_test() }) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_096()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn new file mode 100644 index 000000000..db1e93c48 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the halt operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_097 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.halt; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_097() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(R:{ field1 := f_test() }) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_097()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn new file mode 100644 index 000000000..c935f0733 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the clear operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_098 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.clear; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_098() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(R:{ field1 := f_test() }) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_098()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn new file mode 100644 index 000000000..faba62285 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the checkstate operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_099 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (p.checkstate("Started")) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_099() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_099()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn new file mode 100644 index 000000000..ccdc8288e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the send operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_100 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.send(R:{ field1 := 2 }); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_100() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_100()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn new file mode 100644 index 000000000..3ccb7a4d9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the receive operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_101 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.receive(R:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_101() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_101()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn new file mode 100644 index 000000000..c129f8293 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the trigger operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_102 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.trigger(R:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_102() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_102()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn new file mode 100644 index 000000000..e5a85624f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the call operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_103 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return template integer { + psig.call(S:{}, nowait); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_103() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_103()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn new file mode 100644 index 000000000..832770e1e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getcall operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_104 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.getcall(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_104() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_104()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn new file mode 100644 index 000000000..53823ed50 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the reply operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_105 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.reply(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_105() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + psig.getcall(S:{}); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_105()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn new file mode 100644 index 000000000..92fdc55a6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getreply operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_106 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return template integer { + psig.getreply(S:{}); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_106() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_106()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn new file mode 100644 index 000000000..b5635c31c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the raise operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_107 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.raise(S, "UserException"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_107() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + psig.getcall(S:{}); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_107()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn new file mode 100644 index 000000000..520fcb1ff --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the catch operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_108 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return template integer { + psig.catch(S, charstring:?); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_108() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_108()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn new file mode 100644 index 000000000..aa89dc896 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the check operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_109 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.check; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_109() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_109()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn new file mode 100644 index 000000000..160513b92 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the connect operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_110 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + connect(mtc:p, mtc:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_110() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_110()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn new file mode 100644 index 000000000..d91d6f9f8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the disconnect operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_111 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + disconnect(mtc:p, mtc:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_111() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_111()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn new file mode 100644 index 000000000..71d2040d8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the map operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_112 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + map(mtc:p, system:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_112() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + disconnect(mtc:p, mtc:p); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_112()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn new file mode 100644 index 000000000..a7a126b57 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the unmap operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_113 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + unmap(mtc:p, system:p); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_113() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_113()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn new file mode 100644 index 000000000..b88e0104a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the action operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// c) The action operation (see notes 2 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_114 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + action("My action"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_114() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_114()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn new file mode 100644 index 000000000..0bac59f50 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.start operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_115 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.start; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_115() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_115()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn new file mode 100644 index 000000000..4bc04b2d7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.stop operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_116 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.stop; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_116() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_116()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn new file mode 100644 index 000000000..6355f778c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.running operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_117 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.running) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_117() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_117()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn new file mode 100644 index 000000000..6b2968bde --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the read operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_118 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.read > 0.0) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_118() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_118()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn new file mode 100644 index 000000000..2fffe72d2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timeout operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_119 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + any timer.timeout; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_119() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_119()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn new file mode 100644 index 000000000..782b6c25d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a non-deterministic external function call cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// e) Calling non-deterministic external functions, i.e. external functions where the resulting values for actual +// inout or out parameters or the return value may differ for different invocations with the same actual in and +// inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_120 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_120() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_120()) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_120() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_120()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn new file mode 100644 index 000000000..baa6f7612 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the predefined rnd function cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// f) Calling the rnd predefined function (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_121 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (rnd() > 0.5) { return ?; } + else { return 1; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_121() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_121()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn new file mode 100644 index 000000000..37ac0a850 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an assignment of a component variable (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_122 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return template integer { + vc_int := 1; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_122() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_122()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn new file mode 100644 index 000000000..53325c66b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual out parameter (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_123 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_out(vc_int); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_123() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_123()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn new file mode 100644 index 000000000..8bb20e1a5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual inout parameter (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_124 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_inout(vc_int); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_124() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_124()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn new file mode 100644 index 000000000..8f5df0235 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the setverdict operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// h) Calling the setverdict operation (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_125 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + setverdict(pass); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_125() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_125()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn new file mode 100644 index 000000000..fdd42b120 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the activate operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_126 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + activate(a_anyTimer()); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_126() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_126()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn new file mode 100644 index 000000000..66da6c465 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the deactivate operation cannot be used in a function called during receiving operation (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_127 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + deactivate; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_127() runs on GeneralComp system GeneralComp { + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test() }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_127()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn new file mode 100644 index 000000000..b8f0e03f1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an out parameter (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_128 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test(out integer p_out) runs on GeneralComp return template integer { + p_out := 1; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_128() runs on GeneralComp system GeneralComp { + var integer v_int; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_int) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_128()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn new file mode 100644 index 000000000..31dde7862 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an inout parameter (in in-line templates) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_129 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test(inout integer p_inout) runs on GeneralComp return template integer { + p_inout := 1; + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_129() runs on GeneralComp system GeneralComp { + var integer v_int := 0; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(R:{ field1 := f_test(v_int) }); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_129()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn new file mode 100644 index 000000000..7b8da4fbb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the create operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_130 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var GeneralComp v_ptc := GeneralComp.create; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_130() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_130()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn new file mode 100644 index 000000000..87ee7bef4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.start operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_131 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.start(f_ptcBehaviour()); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_131() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_ptc))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_131()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn new file mode 100644 index 000000000..ec5f1425b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.stop operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_132 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.stop; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_132() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_ptc))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_132()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn new file mode 100644 index 000000000..b2388afd0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the kill operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_133 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.kill; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_133() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_ptc))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_133()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn new file mode 100644 index 000000000..91936be9b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.running operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_134 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.running) { return ?; } + else { return 1; } + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_134() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_ptc))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_134()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn new file mode 100644 index 000000000..15b17d854 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the alive operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_135 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return template integer { + if (p_ptc.alive) { return ?; } + else { return 1; } + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_135() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_ptc))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_135()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn new file mode 100644 index 000000000..23e8c7a3e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the done operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_136 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.done; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_136() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_ptc))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_136()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn new file mode 100644 index 000000000..6cbd4de71 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the killed operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_137 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return template integer { + p_ptc.killed; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_137() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_ptc))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_137()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn new file mode 100644 index 000000000..008a4a16b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.start operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_138 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.start; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_138() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(m_msg(f_test())) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_138()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn new file mode 100644 index 000000000..532d9190e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.stop operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_139 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.stop; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_139() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(m_msg(f_test())) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_139()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn new file mode 100644 index 000000000..91b3b5362 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the halt operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_140 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.halt; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_140() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(m_msg(f_test())) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_140()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn new file mode 100644 index 000000000..fcf0e37b0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the clear operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_141 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.clear; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_141() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + alt { + [] p.receive(m_msg(f_test())) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_141()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn new file mode 100644 index 000000000..5adc9cb78 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the checkstate operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_142 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (p.checkstate("Started")) { return ?; } + else { return 1; } + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_142() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_142()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn new file mode 100644 index 000000000..41705d072 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the send operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_143 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.send(R:{ field1 := 2 }); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_143() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_143()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn new file mode 100644 index 000000000..be7273169 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the receive operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_144 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.receive(R:?); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_144() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_144()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn new file mode 100644 index 000000000..680836fc5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the trigger operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_145 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.trigger(R:?); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_145() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_145()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn new file mode 100644 index 000000000..0a06119d0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the call operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_146 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return template integer { + psig.call(S:{}, nowait); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_146() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_146()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn new file mode 100644 index 000000000..f36db613a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn @@ -0,0 +1,78 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getcall operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_147 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.getcall(S:{}); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_147() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_147()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn new file mode 100644 index 000000000..6bd2c1286 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn @@ -0,0 +1,79 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the reply operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_148 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.reply(S:{}); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_148() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + psig.getcall(S:{}); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_148()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn new file mode 100644 index 000000000..05ab3c9c4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn @@ -0,0 +1,80 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getreply operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_149 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return template integer { + psig.getreply(S:{}); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_149() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_149()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn new file mode 100644 index 000000000..5d9015ba2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn @@ -0,0 +1,79 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the raise operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_150 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return template integer { + psig.raise(S, "UserException"); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_150() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(R:{ field1 := 1 }); + psig.getcall(S:{}); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_150()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn new file mode 100644 index 000000000..39b440d52 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn @@ -0,0 +1,80 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the catch operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_151 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return template integer { + psig.catch(S, charstring:?); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_151() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_151()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn new file mode 100644 index 000000000..34b5b9b4b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the check operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_152 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.check; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_152() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_152()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn new file mode 100644 index 000000000..a23c11f22 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the connect operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_153 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + connect(mtc:p, mtc:p); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_153() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_153()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn new file mode 100644 index 000000000..99699aa40 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the disconnect operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_154 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + disconnect(mtc:p, mtc:p); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_154() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_154()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn new file mode 100644 index 000000000..27e25de44 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the map operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_155 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + map(mtc:p, system:p); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_155() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + disconnect(mtc:p, mtc:p); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_155()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn new file mode 100644 index 000000000..c7b0cafc9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the unmap operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_156 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return template integer { + unmap(mtc:p, system:p); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_156() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_156()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn new file mode 100644 index 000000000..bae558ada --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the action operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// c) The action operation (see notes 2 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_157 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + action("My action"); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_157() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_157()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn new file mode 100644 index 000000000..b38d61cf0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.start operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_158 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.start; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_158() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_158()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn new file mode 100644 index 000000000..a424db58f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.stop operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_159 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + tc_tmr.stop; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_159() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_159()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn new file mode 100644 index 000000000..87e054c69 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.running operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_160 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.running) { return ?; } + else { return 1; } + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_160() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_160()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn new file mode 100644 index 000000000..8ff9272e2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the read operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_161 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + if (tc_tmr.read > 0.0) { return ?; } + else { return 1; } + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_161() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_161()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn new file mode 100644 index 000000000..acb4c3d54 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timeout operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_162 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return template integer { + any timer.timeout; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_162() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_162()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn new file mode 100644 index 000000000..868edf7c6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a non-deterministic external function call cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// e) Calling non-deterministic external functions, i.e. external functions where the resulting values for actual +// inout or out parameters or the return value may differ for different invocations with the same actual in and +// inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_163 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_163() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_163()) { return ?; } + else { return 1; } + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_163() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_163()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn new file mode 100644 index 000000000..4e13ff4ac --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the predefined rnd function cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// f) Calling the rnd predefined function (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_164 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + if (rnd() > 0.5) { return ?; } + else { return 1; } + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_164() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_164()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn new file mode 100644 index 000000000..503417599 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an assignment of a component variable (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_165 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return template integer { + vc_int := 1; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_165() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_165()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn new file mode 100644 index 000000000..8474ed6f3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual out parameter (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_166 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_out(vc_int); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_166() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_166()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn new file mode 100644 index 000000000..3acedb72e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain a component variable used as an actual inout parameter (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_167 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return template integer { + f_inout(vc_int); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_167() runs on GeneralComp system GeneralComp { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_167()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn new file mode 100644 index 000000000..7c20ef1b9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the setverdict operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// h) Calling the setverdict operation (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_168 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + setverdict(pass); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_168() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_168()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn new file mode 100644 index 000000000..ba5825c4c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the activate operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_169 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + activate(a_anyTimer()); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_169() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_169()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn new file mode 100644 index 000000000..559ded7fe --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the deactivate operation cannot be used in a function called during receiving operation (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_170 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return template integer { + deactivate; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_170() runs on GeneralComp system GeneralComp { + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test())); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_170()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn new file mode 100644 index 000000000..b15686931 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an out parameter (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_171 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test(out integer p_out) runs on GeneralComp return template integer { + p_out := 1; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_171() runs on GeneralComp system GeneralComp { + var integer v_int; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_int))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_171()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn new file mode 100644 index 000000000..86c1af54e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called during receiving operation cannot contain an inout parameter (as actual parameters) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_172 { + type record R { + integer field1 + } + + type port P message { + inout R; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test(inout integer p_inout) runs on GeneralComp return template integer { + p_inout := 1; + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_172() runs on GeneralComp system GeneralComp { + var integer v_int := 0; + connect(mtc:p, mtc:p); + p.send(R:{ field1 := 1 }); + p.receive(m_msg(f_test(v_int))); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_172()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn new file mode 100644 index 000000000..25c6feebd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the create operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_173 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return boolean { + var GeneralComp v_ptc := GeneralComp.create; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_173() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_173()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn new file mode 100644 index 000000000..5d5e05666 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.start operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_174 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.start(f_ptcBehaviour()); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_174() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_ptc)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_174()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn new file mode 100644 index 000000000..963778544 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.stop operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_175 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.stop; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_175() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_ptc)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_175()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn new file mode 100644 index 000000000..a887931e9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the kill operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_176 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.kill; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_176() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_ptc)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_176()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn new file mode 100644 index 000000000..3c5f045c6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.running operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_177 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.running) { return true; } + else { return false; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_177() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_ptc)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_177()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn new file mode 100644 index 000000000..58ba63491 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the alive operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_178 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.alive) { return true; } + else { return false; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_178() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_ptc)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_178()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn new file mode 100644 index 000000000..ebe7880af --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the done operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_179 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.done; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_179() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_ptc)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_179()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn new file mode 100644 index 000000000..ed23493bc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the killed operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_180 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.killed; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_180() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_ptc)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_180()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn new file mode 100644 index 000000000..389142cef --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.start operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_181 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.start; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_181() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_181()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn new file mode 100644 index 000000000..14f4f7a81 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.stop operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_182 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.stop; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_182() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_182()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn new file mode 100644 index 000000000..a53c649b6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the halt operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_183 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.halt; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_183() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_183()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn new file mode 100644 index 000000000..4f816f293 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the clear operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_184 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.clear; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_184() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_184()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn new file mode 100644 index 000000000..c9af21a57 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the checkstate operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_185 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + if (p.checkstate("Started")) { return true; } + else { return false; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_185() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_185()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn new file mode 100644 index 000000000..1e1dbbd1d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the send operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_186 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.send(2); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_186() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_186()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn new file mode 100644 index 000000000..51439e70c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the receive operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_187 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.receive(integer:?); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_187() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_187()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn new file mode 100644 index 000000000..ef9a2fa1f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the trigger operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_188 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.trigger(integer:?); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_188() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_188()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn new file mode 100644 index 000000000..918590fd5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the call operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_189 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return boolean { + psig.call(S:{}, nowait); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_189() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_189()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn new file mode 100644 index 000000000..0cf83054d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getcall operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_190 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.getcall(S:{}); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_190() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_190()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn new file mode 100644 index 000000000..3acacddf2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the reply operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_191 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.reply(S:{}); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_191() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_191()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn new file mode 100644 index 000000000..483a40680 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getreply operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_192 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return boolean { + psig.getreply(S:{}); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_192() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_192()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn new file mode 100644 index 000000000..e6397a580 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the raise operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_193 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.raise(S, "UserException"); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_193() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_193()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn new file mode 100644 index 000000000..f5612b12e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the catch operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_194 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return boolean { + psig.catch(S, charstring:?); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_194() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_194()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn new file mode 100644 index 000000000..f0a82d670 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the check operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_195 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.check; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_195() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_195()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn new file mode 100644 index 000000000..ba27c803d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the connect operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_196 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + connect(mtc:p, mtc:p); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_196() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_196()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn new file mode 100644 index 000000000..1ffb539a4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the disconnect operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_197 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + disconnect(mtc:p, mtc:p); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_197() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_197()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn new file mode 100644 index 000000000..bfa505436 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the map operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_198 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + map(mtc:p, system:p); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_198() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_198()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn new file mode 100644 index 000000000..af5598b62 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the unmap operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_199 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + unmap(mtc:p, system:p); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_199() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_199()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn new file mode 100644 index 000000000..3dc7eb831 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the action operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// c) The action operation (see notes 2 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_200 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + action("My action"); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_200() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_200()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn new file mode 100644 index 000000000..fe8ea723d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.start operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_201 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.start; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_201() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_201()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn new file mode 100644 index 000000000..696e28507 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.stop operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_202 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.stop; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_202() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_202()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn new file mode 100644 index 000000000..0d562a20b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.running operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_203 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 5.0; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.running) { return true; } + else { return false; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_203() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_203()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn new file mode 100644 index 000000000..5002a861c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the read operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_204 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.read > 0.0) { return true; } + else { return false; } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_204() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_204()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn new file mode 100644 index 000000000..20a19c1e2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timeout operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_205 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + any timer.timeout; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_205() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_205()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn new file mode 100644 index 000000000..09eb48a78 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in a guard of an alt statement cannot contain an assignment of a component variable + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_206 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return boolean { + vc_int := 1; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_206() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_206()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn new file mode 100644 index 000000000..a8432108a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in a guard of an alt statement cannot contain a component variable used as an actual out parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_207 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_out(vc_int); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_207() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_207()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn new file mode 100644 index 000000000..2535c1d34 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in a guard of an alt statement cannot contain a component variable used as an actual inout parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_208 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_inout(vc_int); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_208() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_208()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn new file mode 100644 index 000000000..1ea316a1f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the activate operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_209 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + activate(a_anyTimer()); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_209() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_209()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn new file mode 100644 index 000000000..44050180c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the deactivate operation cannot be used in guards of alt statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_210 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + deactivate; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_210() runs on GeneralComp system GeneralComp { + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test()] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_210()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn new file mode 100644 index 000000000..2fe8d8853 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called from a guard statement of an alt operation cannot contain out parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_211 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test(out integer p_par) runs on GeneralComp return boolean { + p_par := 1; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_211() runs on GeneralComp system GeneralComp { + var integer v_int := 0; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [f_test(v_int)] p.receive(integer:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_211()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn new file mode 100644 index 000000000..fcb527394 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the create operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_212 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return boolean { + var GeneralComp v_ptc := GeneralComp.create; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_212() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_212()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn new file mode 100644 index 000000000..6afd5055d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.start operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_213 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.start(f_ptcBehaviour()); + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + [f_test(p_ptc)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_213() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_213()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn new file mode 100644 index 000000000..f225618a1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.stop operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_214 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.stop; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + [f_test(p_ptc)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_214() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_214()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn new file mode 100644 index 000000000..6fe98928b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the kill operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_215 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.kill; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + [f_test(p_ptc)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_215() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_215()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn new file mode 100644 index 000000000..6d3961e35 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.running operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_216 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.running) { return true; } + else { return false; } + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + [f_test(p_ptc)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_216() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_216()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn new file mode 100644 index 000000000..860f82d1d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the alive operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_217 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.alive) { return true; } + else { return false; } + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + [f_test(p_ptc)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_217() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_217()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn new file mode 100644 index 000000000..684872e07 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the done operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_218 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.done; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + [f_test(p_ptc)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_218() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_218()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn new file mode 100644 index 000000000..d73642426 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the killed operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_219 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.killed; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + [f_test(p_ptc)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_219() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_219()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn new file mode 100644 index 000000000..dfb31d5d4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.start operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_220 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.start; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_220() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_220()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn new file mode 100644 index 000000000..7837f844a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.stop operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_221 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.stop; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_221() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_221()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn new file mode 100644 index 000000000..1c82e446c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the halt operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_222 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.halt; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_222() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_222()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn new file mode 100644 index 000000000..f6cd17512 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the clear operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_223 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.clear; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_223() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_223()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn new file mode 100644 index 000000000..0c878d87b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the checkstate operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_224 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + if (p.checkstate("Started")) { return true; } + else { return false; } + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_224() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_224()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn new file mode 100644 index 000000000..60b6ebed3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the send operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_225 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.send(2); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_225() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_225()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn new file mode 100644 index 000000000..143b0f29f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the receive operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_226 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.receive(integer:?); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_226() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_226()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn new file mode 100644 index 000000000..d3b46094e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the trigger operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_227 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.trigger(integer:?); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_227() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_227()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn new file mode 100644 index 000000000..28190ca96 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the call operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_228 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return boolean { + psig.call(S:{}, nowait); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_228() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_228()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn new file mode 100644 index 000000000..b5632670d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getcall operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_229 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.getcall(S:{}); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_229() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_229()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn new file mode 100644 index 000000000..213a9830f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the reply operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_230 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.reply(S:{}); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_230() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_230()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn new file mode 100644 index 000000000..db115391e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getreply operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_231 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return boolean { + psig.getreply(S:{}); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_231() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_231()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn new file mode 100644 index 000000000..aa24437d3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the raise operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_232 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.raise(S, "UserException"); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_232() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_232()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn new file mode 100644 index 000000000..2586ad030 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the catch operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_233 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return boolean { + psig.catch(S, charstring:?); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_233() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_233()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn new file mode 100644 index 000000000..9233364a4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the check operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_234 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.check; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_234() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_234()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn new file mode 100644 index 000000000..22dfdc3e7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the connect operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_235 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + connect(mtc:p, mtc:p); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_235() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_235()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn new file mode 100644 index 000000000..f9e1bef2c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the disconnect operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_236 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + disconnect(mtc:p, mtc:p); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_236() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_236()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn new file mode 100644 index 000000000..234a26cea --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the map operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_237 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + map(mtc:p, system:p); + return true; + } + + altstep a_rcv() runs on GeneralComp system GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_237() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_237()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn new file mode 100644 index 000000000..1e0e97a73 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the unmap operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_238 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + unmap(mtc:p, system:p); + return true; + } + + altstep a_rcv() runs on GeneralComp system GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_238() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_238()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn new file mode 100644 index 000000000..9144cf733 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the action operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// c) The action operation (see notes 2 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_239 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + action("My action"); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_239() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_239()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn new file mode 100644 index 000000000..2f5bce7cc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.start operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_240 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.start; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_240() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_240()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn new file mode 100644 index 000000000..bae694c83 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.stop operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_241 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.stop; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_241() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_241()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn new file mode 100644 index 000000000..3e7032e97 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.running operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_242 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 5.0; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.running) { return true; } + else { return false; } + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_242() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_242()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn new file mode 100644 index 000000000..1ae2973c7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the read operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_243 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.read > 0.0) { return true; } + else { return false; } + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_243() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_243()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn new file mode 100644 index 000000000..66cddb76c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timeout operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_244 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + any timer.timeout; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_244() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_244()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn new file mode 100644 index 000000000..c926024ee --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a non-deterministic external function call cannot be used in guards of altsteps + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// e) Calling non-deterministic external functions, i.e. external functions where the resulting values for actual +// inout or out parameters or the return value may differ for different invocations with the same actual in and +// inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_245 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_245() return boolean; + + function f_test() runs on GeneralComp return boolean { + if (xf_NegSem_160104_invoking_functions_from_specific_places_245()) { return true; } + else { return true; } + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_245() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_245()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn new file mode 100644 index 000000000..39fca5ea2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the predefined rnd function cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// f) Calling the rnd predefined function (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_246 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + if (rnd() > 0.5) { return true; } + else { return true; } + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_246() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_246()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn new file mode 100644 index 000000000..7555961a4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in a guard of an altstep cannot contain an assignment of a component variable + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_247 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return boolean { + vc_int := 1; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_247() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_247()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn new file mode 100644 index 000000000..4cd1430c3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in a guard of an altstep cannot contain a component variable used as an actual out parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_248 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_out(vc_int); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_248() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_248()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn new file mode 100644 index 000000000..722b91853 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in a guard of an altstep cannot contain a component variable used as an actual inout parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_249 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_inout(vc_int); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_249() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_249()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn new file mode 100644 index 000000000..23696bbac --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the setverdict operation cannot be used in guard statements of altstep + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// h) Calling the setverdict operation (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_250 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + setverdict(pass); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_250() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_250()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn new file mode 100644 index 000000000..3cc963a68 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the activate operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_251 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + activate(a_anyTimer()); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_251() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_251()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn new file mode 100644 index 000000000..8e4a37484 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the deactivate operation cannot be used in guards of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_252 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + deactivate; + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_252() runs on GeneralComp system GeneralComp { + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_252()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn new file mode 100644 index 000000000..46ae73d85 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called from a guard statement of an altstep cannot contain out parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_253 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test(out integer p_par) runs on GeneralComp return boolean { + p_par := 1; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var integer v_int := 0; + [f_test(v_int)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_253() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_253()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn new file mode 100644 index 000000000..e292f39e0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called from a guard statement of an altstep cannot contain inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_254 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test(inout integer p_par) runs on GeneralComp return boolean { + p_par := 1; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var integer v_int := 0; + [f_test(v_int)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_254() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_254()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn new file mode 100644 index 000000000..5f62d0b52 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the create operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_255 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return boolean { + var GeneralComp v_ptc := GeneralComp.create; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_255() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_255()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn new file mode 100644 index 000000000..ebc3e1ca6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.start operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_256 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.start(f_ptcBehaviour()); + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + var boolean v_guard := f_test(p_ptc); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_256() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_256()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn new file mode 100644 index 000000000..1f98dd172 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.stop operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_257 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.stop; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + var boolean v_guard := f_test(p_ptc); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_257() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_257()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn new file mode 100644 index 000000000..ff174c568 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the kill operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_258 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.kill; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + var boolean v_guard := f_test(p_ptc); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_258() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_258()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn new file mode 100644 index 000000000..7881400dc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the component.running operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_259 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.running) { return true; } + else { return false; } + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + var boolean v_guard := f_test(p_ptc); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_259() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_259()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn new file mode 100644 index 000000000..12b6f71cc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the alive operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_260 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.alive) { return true; } + else { return false; } + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + var boolean v_guard := f_test(p_ptc); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_260() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_260()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn new file mode 100644 index 000000000..7dde1ee63 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the done operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_261 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.done; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + var boolean v_guard := f_test(p_ptc); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_261() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_261()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn new file mode 100644 index 000000000..8954059f6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the killed operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// a) All component operations, i.e. create, start (component), stop (component), kill, running (component), +// alive, done and killed (see notes 1, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_262 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.killed; + return true; + } + + altstep a_rcv(GeneralComp p_ptc) runs on GeneralComp { + var boolean v_guard := f_test(p_ptc); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_262() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(v_ptc); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_262()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn new file mode 100644 index 000000000..eb45d4fa8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.start operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_263 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.start; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_263() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_263()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn new file mode 100644 index 000000000..cbeef9df5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the port.stop operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_264 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.stop; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_264() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_264()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn new file mode 100644 index 000000000..529d8c53f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the halt operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_265 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.halt; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_265() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_265()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn new file mode 100644 index 000000000..5e02e1d9a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the clear operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_266 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.clear; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_266() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_266()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn new file mode 100644 index 000000000..64e75da74 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the checkstate operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_267 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + if (p.checkstate("Started")) { return true; } + else { return false; } + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_267() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_267()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn new file mode 100644 index 000000000..53213f3a9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the send operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_268 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.send(2); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_268() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_268()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn new file mode 100644 index 000000000..2dda7a590 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the receive operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_269 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.receive(integer:?); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_269() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_269()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn new file mode 100644 index 000000000..496b9dc08 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the trigger operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_270 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.trigger(integer:?); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_270() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_270()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn new file mode 100644 index 000000000..b56b6ee98 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the call operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_271 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return boolean { + psig.call(S:{}, nowait); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_271() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_271()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn new file mode 100644 index 000000000..c30b4aea9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn @@ -0,0 +1,75 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getcall operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_272 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.getcall(S:{}); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_272() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_272()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn new file mode 100644 index 000000000..799ee3b37 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the reply operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_273 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.reply(S:{}); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_273() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_273()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn new file mode 100644 index 000000000..4f39701d3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the getreply operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_274 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return boolean { + psig.getreply(S:{}); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_274() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_274()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn new file mode 100644 index 000000000..2496d85c0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the raise operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_275 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.raise(S, "UserException"); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_275() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_275()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn new file mode 100644 index 000000000..e902f998f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn @@ -0,0 +1,77 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the catch operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_276 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return boolean { + psig.catch(S, charstring:?); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_276() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_276()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn new file mode 100644 index 000000000..5b6144005 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the check operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_277 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.check; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_277() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_277()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn new file mode 100644 index 000000000..d2323f045 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the connect operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_278 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + connect(mtc:p, mtc:p); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_278() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_278()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn new file mode 100644 index 000000000..ef0c31196 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the disconnect operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_279 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + disconnect(mtc:p, mtc:p); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_279() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_279()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn new file mode 100644 index 000000000..a51205557 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the map operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_280 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + map(mtc:p, system:p); + return true; + } + + altstep a_rcv() runs on GeneralComp system GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_280() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_280()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn new file mode 100644 index 000000000..0c2c437ca --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the unmap operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// b) All port operations, i.e. start (port), stop (port), halt, clear, checkstate, send, receive, trigger, call, +// getcall, reply, getreply, raise, catch, check, connect, disconnect, map and unmap (see notes 1, 2, 3, 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_281 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + unmap(mtc:p, system:p); + return true; + } + + altstep a_rcv() runs on GeneralComp system GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_281() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_281()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn new file mode 100644 index 000000000..042ce8b1e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the action operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// c) The action operation (see notes 2 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_282 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + action("My action"); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_282() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_282()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn new file mode 100644 index 000000000..d0cb1daf2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.start operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_283 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.start; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_283() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_283()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn new file mode 100644 index 000000000..a063930c9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.stop operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_284 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.stop; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_284() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_284()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn new file mode 100644 index 000000000..7f24f7e7d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timer.running operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_285 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 5.0; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.running) { return true; } + else { return false; } + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_285() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_285()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn new file mode 100644 index 000000000..96ff6bb6b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the read operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_286 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.read > 0.0) { return true; } + else { return false; } + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_286() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_286()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn new file mode 100644 index 000000000..3dc06d655 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the timeout operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// d) All timer operations, i.e. start (timer), stop (timer), running (timer), read, timeout (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_287 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + any timer.timeout; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_287() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_287()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn new file mode 100644 index 000000000..a09ead32b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn @@ -0,0 +1,68 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a non-deterministic external function call cannot be used in altstep local definitions + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// e) Calling non-deterministic external functions, i.e. external functions where the resulting values for actual +// inout or out parameters or the return value may differ for different invocations with the same actual in and +// inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_288 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_288() return boolean; + + function f_test() runs on GeneralComp return boolean { + if (xf_NegSem_160104_invoking_functions_from_specific_places_288()) { return true; } + else { return true; } + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_288() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_288()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn new file mode 100644 index 000000000..e2619c804 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the predefined rnd function cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// f) Calling the rnd predefined function (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_289 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + if (rnd() > 0.5) { return true; } + else { return true; } + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_289() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_289()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn new file mode 100644 index 000000000..95439ddd7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in an altstep local definition cannot contain an assignment of a component variable + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_290 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return boolean { + vc_int := 1; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_290() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_290()); + } +} + diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn new file mode 100644 index 000000000..cd5ddc923 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in an altstep local definition cannot contain a component variable used as an actual out parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_291 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_out(vc_int); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_291() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_291()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn new file mode 100644 index 000000000..58a475605 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify a function called in an altstep local definition cannot contain a component variable used as an actual inout parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// g) Changing of component variables, i.e. using component variables on the left-hand side of assignments, +// and in the instantiation of out and inout parameters (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_292 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_inout(vc_int); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_292() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_292()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn new file mode 100644 index 000000000..c92b79795 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the setverdict operation cannot be used in guard statements of altstep + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// h) Calling the setverdict operation (see notes 4 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_293 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + setverdict(pass); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_293() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_293()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn new file mode 100644 index 000000000..3279f83b5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the activate operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_294 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + activate(a_anyTimer()); + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_294() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_294()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn new file mode 100644 index 000000000..66c2edd0d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that the deactivate operation cannot be used in altstep local definitions + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// i) Activation and deactivation of defaults, i.e. the activate and deactivate statements (see notes 5 and 6). + +module NegSem_160104_invoking_functions_from_specific_places_295 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + deactivate; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_295() runs on GeneralComp system GeneralComp { + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_295()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn new file mode 100644 index 000000000..6652fef54 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in altstep altstep local definitions cannot contain out parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_296 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test(out integer p_par) runs on GeneralComp return boolean { + p_par := 1; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var integer v_int := 0; + var boolean v_guard := f_test(v_int); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_296() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_296()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn new file mode 100644 index 000000000..cf138cd7e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in altstep altstep local definitions cannot contain inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// j) Calling functions and deterministic external functions with out or inout parameters (see notes 7 and 8). + +module NegSem_160104_invoking_functions_from_specific_places_297 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test(inout integer p_par) runs on GeneralComp return boolean { + p_par := 1; + return true; + } + + altstep a_rcv() runs on GeneralComp { + var integer v_int := 0; + var boolean v_guard := f_test(v_int); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_297() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + a_rcv(); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_297()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_038.cc b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_038.cc new file mode 100644 index 000000000..ac4297430 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_038.cc @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +#include "NegSem_160104_invoking_functions_from_specific_places_038.hh" + +namespace NegSem__160104__invoking__functions__from__specific__places__038 +{ + + BOOLEAN xf__NegSem__160104__invoking__functions__from__specific__places__038() + { + return true; + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_079.cc b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_079.cc new file mode 100644 index 000000000..2207262f5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_079.cc @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +#include "NegSem_160104_invoking_functions_from_specific_places_079.hh" + +namespace NegSem__160104__invoking__functions__from__specific__places__079 +{ + + BOOLEAN xf__NegSem__160104__invoking__functions__from__specific__places__079() + { + return true; + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_120.cc b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_120.cc new file mode 100644 index 000000000..dc94547dc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_120.cc @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +#include "NegSem_160104_invoking_functions_from_specific_places_120.hh" + +namespace NegSem__160104__invoking__functions__from__specific__places__120 +{ + + BOOLEAN xf__NegSem__160104__invoking__functions__from__specific__places__120() + { + return true; + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_163.cc b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_163.cc new file mode 100644 index 000000000..d273cf7ea --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_163.cc @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +#include "NegSem_160104_invoking_functions_from_specific_places_163.hh" + +namespace NegSem__160104__invoking__functions__from__specific__places__163 +{ + + BOOLEAN xf__NegSem__160104__invoking__functions__from__specific__places__163() + { + return true; + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_245.cc b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_245.cc new file mode 100644 index 000000000..226c6bfec --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_245.cc @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +#include "NegSem_160104_invoking_functions_from_specific_places_245.hh" + +namespace NegSem__160104__invoking__functions__from__specific__places__245 +{ + + BOOLEAN xf__NegSem__160104__invoking__functions__from__specific__places__245() + { + return true; + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_288.cc b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_288.cc new file mode 100644 index 000000000..a58af41b2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_288.cc @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +#include "NegSem_160104_invoking_functions_from_specific_places_288.hh" + +namespace NegSem__160104__invoking__functions__from__specific__places__288 +{ + + BOOLEAN xf__NegSem__160104__invoking__functions__from__specific__places__288() + { + return true; + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn new file mode 100644 index 000000000..72aad047d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1, verify that altstep without a runs on clause cannot be started as component behaviour + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction f) +// Altsteps started by using the start test component operation shall always have a runs on clause (see clause 22.5) +// and are considered to be invoked in the component to be started, i.e. not locally. However, the start test component +// operation may be invoked within behaviours without a runs on clause. + +module NegSem_1602_toplevel_007 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_test() { + [] any port.receive { + setverdict(pass); + } + } + + testcase TC_NegSem_1602_toplevel_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, v_ptc:p); + p.send(1); + v_ptc.start(a_test()); + v_ptc.done; + } + + control { + execute(TC_NegSem_1602_toplevel_007()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn new file mode 100644 index 000000000..f03e1ec05 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1, verify that altstep with a runs on clause can be started as component behaviour + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction f) +// Altsteps started by using the start test component operation shall always have a runs on clause (see clause 22.5) +// and are considered to be invoked in the component to be started, i.e. not locally. However, the start test component +// operation may be invoked within behaviours without a runs on clause. + +module Sem_1602_toplevel_002 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_test() runs on GeneralComp{ + [] any port.receive { + setverdict(pass); + } + } + + testcase TC_Sem_1602_toplevel_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, v_ptc:p); + p.send(1); + v_ptc.start(a_test()); + v_ptc.done; + } + + control { + execute(TC_Sem_1602_toplevel_002()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn new file mode 100644 index 000000000..f718fd5a8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:16.1, verify that altstep with a runs on clause can be started as component behaviour from a context without a runs on clause + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction f) +// Altsteps started by using the start test component operation shall always have a runs on clause (see clause 22.5) +// and are considered to be invoked in the component to be started, i.e. not locally. However, the start test component +// operation may be invoked within behaviours without a runs on clause. + +module Sem_1602_toplevel_003 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_test() runs on GeneralComp{ + [] any port.receive { + setverdict(pass); + } + } + + function f_startPtc(GeneralComp v_ptc) { + v_ptc.start(a_test()); + } + + testcase TC_Sem_1602_toplevel_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, v_ptc:p); + p.send(1); + f_startPtc(v_ptc); + v_ptc.done; + } + + control { + execute(TC_Sem_1602_toplevel_003()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn new file mode 100644 index 000000000..6d313649d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:19.3, Ensure that the IUT properly evaluates select-case statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_190301_select_case_statement_005 { + + type component GeneralComp { + } + + testcase TC_Sem_190301_select_case_statement_005 () runs on GeneralComp{ + var charstring v_i:="aBcDeFg"; + + select (v_i) { + case(charstring:"aBc") { + setverdict(fail); + } + case(charstring:"aBcDeFg") { + setverdict(pass); + } + case(charstring:"aBcD") { + setverdict(fail); + } + case else { + setverdict(fail); + } + } + } + + + control{ + + execute(TC_Sem_190301_select_case_statement_005()); + + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn new file mode 100644 index 000000000..ebe9a8b2d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:19.3, Ensure that the IUT properly evaluates select-case statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_190301_select_case_statement_006 { + modulepar charstring c_par := "aBcDeFg"; + + type component GeneralComp { + } + + testcase TC_Sem_190301_select_case_statement_006 () runs on GeneralComp{ + + select (c_par) { + case(charstring:"aBc") { + setverdict(fail); + } + case(charstring:"aBcDeFg") { + setverdict(pass); + } + case(charstring:"aBcD") { + setverdict(fail); + } + case else { + setverdict(fail); + } + } + } + + control{ + + execute(TC_Sem_190301_select_case_statement_006()); + + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn new file mode 100644 index 000000000..a1c995cbd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that it is possible to use a select union statement with several branches + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// c) No two cases in a select union statement shall have the same caseIdentifier or TypeIdentifier. +module NegSem_190302_select_union_statement_006 { + + type component GeneralComp { + } + + testcase TC_NegSem_190302_select_union_statement_006() runs on GeneralComp { + var anytype v_any; + v_any.integer := 2; + v_any.charstring := "abc"; + v_any.float := 1.2; + + select union (v_any) { + case (charstring) { + if(match(v_any.charstring,"abc")) + {setverdict(pass, v_any.charstring);} + } case (integer) { + if(match(v_any.integer,2)) + {setverdict(pass, v_any.integer);} + } case (charstring) { // error + if(match(v_any.charstring,"abc")) + {setverdict(fail, v_any.charstring);} + } + case else { + setverdict(fail); + } + } + } + + control { + execute(TC_NegSem_190302_select_union_statement_006()); + } +} +with { + extension "anytype integer, charstring, float" +} diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_007.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_007.ttcn new file mode 100644 index 000000000..8cfea0289 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_007.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that it is possible to use a select union statement with several branches + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If the template instance has type anytype, each branch shall start with the case keyword followed by one or more type names (a list branch) or the else keyword (an else branch) and a statement block. + +module Sem_190302_select_union_statement_007 { + + type component GeneralComp { + } + + testcase TC_Sem_190302_select_union_statement_007() runs on GeneralComp { + var anytype v_any; + v_any.integer := 2; + v_any.charstring := "abc"; + v_any.float := 1.2; + + select union (v_any) { + case (charstring) { + if(match(v_any.charstring,"abc")) + {setverdict(pass, v_any.charstring);} + } case (integer) { + if(match(v_any.integer,2)) + {setverdict(pass, v_any.integer);} + } case (float) { + if(match(v_any.float,1.2)) + {setverdict(pass, v_any.float);} + } + case else { + setverdict(fail); + } + } + } + + control { + execute(TC_Sem_190302_select_union_statement_007()); + } +} +with { + extension "anytype integer, charstring, float" +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn index 23342efc5..c10b6335c 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn @@ -15,13 +15,15 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, create in guard statements + ** @purpose 1:20.2, verify that the create operation cannot be used in guard statements ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the guard expression shall not use of the operations create, running, -// alive and activate. +// b) The evaluation of a Boolean expression guarding an alternative shall not have side effects. To avoid side effects +// that cause an inconsistency between the actual snapshot and the state of the component, the same restrictions +// as the restrictions for the initialization of local definitions within altsteps (clause 16.2) and the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply. module NegSem_2002_TheAltStatement_002 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn index 235eb744b..09673d791 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn @@ -15,13 +15,15 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, running (timer) in guard statements + ** @purpose 1:20.2, verify that the timer.running operation cannot be used in guard statements ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the guard expression shall not use of the operations create, running, -// alive and activate. +// b) The evaluation of a Boolean expression guarding an alternative shall not have side effects. To avoid side effects +// that cause an inconsistency between the actual snapshot and the state of the component, the same restrictions +// as the restrictions for the initialization of local definitions within altsteps (clause 16.2) and the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply. module NegSem_2002_TheAltStatement_003 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn index 2e286caf5..54044fb89 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn @@ -15,13 +15,15 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, running (component) in guard statements + ** @purpose 1:20.2, verify that the component.running operation cannot be used in guard statements ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the guard expression shall not use of the operations create, running, -// alive and activate. +// b) The evaluation of a Boolean expression guarding an alternative shall not have side effects. To avoid side effects +// that cause an inconsistency between the actual snapshot and the state of the component, the same restrictions +// as the restrictions for the initialization of local definitions within altsteps (clause 16.2) and the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply. module NegSem_2002_TheAltStatement_004 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn index b4b89ef67..823d2809b 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn @@ -15,13 +15,15 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, alive in guard statements + ** @purpose 1:20.2, verify that the alive operation cannot be used in guard statements ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the guard expression shall not use of the operations create, running, -// alive and activate. +// b) The evaluation of a Boolean expression guarding an alternative shall not have side effects. To avoid side effects +// that cause an inconsistency between the actual snapshot and the state of the component, the same restrictions +// as the restrictions for the initialization of local definitions within altsteps (clause 16.2) and the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply. module NegSem_2002_TheAltStatement_005 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn index 99e3d5bab..1d67296f0 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn @@ -15,13 +15,15 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, activate in guard statements + ** @purpose 1:20.2, verify that the activate operation cannot be used in guard statements ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the guard expression shall not use of the operations create, running, -// alive and activate. +// b) The evaluation of a Boolean expression guarding an alternative shall not have side effects. To avoid side effects +// that cause an inconsistency between the actual snapshot and the state of the component, the same restrictions +// as the restrictions for the initialization of local definitions within altsteps (clause 16.2) and the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply. module NegSem_2002_TheAltStatement_006 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn index bc18b479a..d494f6765 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn @@ -15,13 +15,16 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, create in alt branch event + ** @purpose 1:20.2, verify that the create operation cannot be used in alt branch events (in inline template) ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the event operation shall not use the operations create, running, alive -// and activate. +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. module NegSem_2002_TheAltStatement_007 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn index 070141dba..06fc6c2d7 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn @@ -15,13 +15,16 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, running (timer) in alt branch event + ** @purpose 1:20.2, verify that the timer.running operation cannot be used in alt branch events (in inline templates) ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the event operation shall not use the operations create, running, alive -// and activate. +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. module NegSem_2002_TheAltStatement_008 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn index a490d9571..b295a63be 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn @@ -15,13 +15,16 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, running (component) in alt branch event + ** @purpose 1:20.2, verify that the component.running operation cannot be used in alt branch events (in inline templates) ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the event operation shall not use the operations create, running, alive -// and activate. +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. module NegSem_2002_TheAltStatement_009 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn index 4bc4b6664..4d02754d9 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn @@ -15,13 +15,16 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, alive in alt branch event + ** @purpose 1:20.2, verify that the alive operation cannot be used in alt branch events (in inline templates) ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the event operation shall not use the operations create, running, alive -// and activate. +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. module NegSem_2002_TheAltStatement_010 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn index 157cd582d..071b94d1d 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn @@ -15,13 +15,16 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, create in alt branch event + ** @purpose 1:20.2, verify that the activate operation cannot be used in alt branch events (in inline templates) ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the event operation shall not use the operations create, running, alive -// and activate. +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. module NegSem_2002_TheAltStatement_011 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn index 278d8e475..bdcdd1917 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn @@ -15,13 +15,14 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, create in altstep branch + ** @purpose 1:20.2, verify that the create operation cannot be used in parameters of alt branch events ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the altstep invocation parameters shall not use the operations create, -// running, alive and activate. +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. module NegSem_2002_TheAltStatement_012 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn index cd08249f7..4525a4e50 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn @@ -15,13 +15,14 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, running (timer) in altstep branch + ** @purpose 1:20.2, verify that the timer.running operation cannot be used in parameters of alt branch events ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the altstep invocation parameters shall not use the operations create, -// running, alive and activate. +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. module NegSem_2002_TheAltStatement_013 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn index 23ebcc949..4a8560aa2 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn @@ -15,13 +15,14 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, running (component) in altstep branch + ** @purpose 1:20.2, verify that the component.running operation cannot be used in parameters of alt branch events ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the altstep invocation parameters shall not use the operations create, -// running, alive and activate. +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. module NegSem_2002_TheAltStatement_014 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn index 1c87062f4..7d47d58b8 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn @@ -15,13 +15,14 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, alive in altstep branch + ** @purpose 1:20.2, verify that the alive operation cannot be used in parameters of alt branch events ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the altstep invocation parameters shall not use the operations create, -// running, alive and activate. +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. module NegSem_2002_TheAltStatement_015 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn index a1edf864a..f5b7fea98 100644 --- a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn @@ -15,13 +15,14 @@ * Modified by: Adrien Kirjak * ** @version 0.0.1 - ** @purpose 1:20.2, create in altstep branch + ** @purpose 1:20.2, verify that the activate operation cannot be used in parameters of alt branch events ** @verdict pass reject *****************************************************************/ // The following requirement is tested: -// Also, the altstep invocation parameters shall not use the operations create, -// running, alive and activate. +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. module NegSem_2002_TheAltStatement_016 { diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn new file mode 100644 index 000000000..f3ea293f2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the create operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_017 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() return boolean { + var GeneralComp v_ptc := GeneralComp.create; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_017() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_017()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn new file mode 100644 index 000000000..4d33cbeb3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the component.start operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_018 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + log("PTC running"); + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.start(f_ptcBehaviour()); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_018() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_ptc)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_018()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn new file mode 100644 index 000000000..7afcf25ec --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the component.stop operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_019 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.stop; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_019() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_ptc)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_019()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn new file mode 100644 index 000000000..4233778c3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the kill operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_020 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.kill; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_020() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_ptc)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_020()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn new file mode 100644 index 000000000..accf79622 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the component.running operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_021 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.running) { return true; } + else { return false; } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_021() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_ptc)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_021()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn new file mode 100644 index 000000000..d429f7fef --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the alive operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_022 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_test(GeneralComp p_ptc) return boolean { + if (p_ptc.alive) { return true; } + else { return false; } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_022() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_ptc)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_022()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn new file mode 100644 index 000000000..7d4efadc7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the done operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_023 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.done; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_023() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_ptc)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_023()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn new file mode 100644 index 000000000..1a634cdfd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the killed operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_024 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + function f_test(GeneralComp p_ptc) return boolean { + p_ptc.killed; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_024() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_ptc)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_024()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn new file mode 100644 index 000000000..55f6106f1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the port.start operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_025 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.start; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_025() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_025()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn new file mode 100644 index 000000000..fdd986c68 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the port.stop operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_026 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.stop; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_026() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_026()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn new file mode 100644 index 000000000..8f649477c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the halt operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_027 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.halt; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_027() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_027()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn new file mode 100644 index 000000000..ceb5d3f81 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the clear operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_028 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.clear; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_028() runs on GeneralComp system GeneralComp { + timer t_tmr := 0.1; + t_tmr.start; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_028()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn new file mode 100644 index 000000000..88a6cbe7c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the checkstate operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_029 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + if (p.checkstate("Started")) { return true; } + else { return false; } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_029() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_029()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn new file mode 100644 index 000000000..afbb6253a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the send operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_030 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.send(2); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_030() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_030()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn new file mode 100644 index 000000000..56970b969 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the receive operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_031 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.receive(integer:?); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_031() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_031()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn new file mode 100644 index 000000000..6651da8ea --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the trigger operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_032 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.trigger(integer:?); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_032() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_032()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn new file mode 100644 index 000000000..2214bfee1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the call operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_033 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_test() runs on GeneralComp return boolean { + psig.call(S:{}, nowait); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_033() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_033()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn new file mode 100644 index 000000000..0c32dbb56 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the getcall operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_034 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.getcall(S:{}); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_034() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_034()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn new file mode 100644 index 000000000..bb7a97a97 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the reply operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_035 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.reply(S:{}); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_035() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_035()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn new file mode 100644 index 000000000..2d633f378 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the getreply operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_036 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S(); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.reply(S:{}); + } + + function f_test() runs on GeneralComp return boolean { + psig.getreply(S:{}); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_036() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_036()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn new file mode 100644 index 000000000..fdc08faba --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the raise operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_037 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.call(S:{}, nowait); + } + + function f_test() runs on GeneralComp return boolean { + psig.raise(S, "UserException"); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_037() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + p.send(1); + psig.getcall(S:{}); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_037()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn new file mode 100644 index 000000000..341776b0c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the catch operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_038 { + type port P message { + inout integer; + } with {extension "internal"} + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + port PSig psig; + } + + function f_ptcBehaviour() runs on GeneralComp { + psig.getcall(S:{}); + psig.raise(S, "UserException"); + } + + function f_test() runs on GeneralComp return boolean { + psig.catch(S, charstring:?); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_038() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + v_ptc.start(f_ptcBehaviour()); + psig.call(S:{}, nowait); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_038()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn new file mode 100644 index 000000000..ea796fbe5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the check operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_039 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.check; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_039() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_039()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn new file mode 100644 index 000000000..7f289bd52 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the connect operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_040 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + connect(mtc:p, mtc:p); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_040() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_040()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn new file mode 100644 index 000000000..91cc62a17 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the disconnect operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_041 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + disconnect(mtc:p, mtc:p); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_041() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_041()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn new file mode 100644 index 000000000..488266f2e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the map operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_042 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + map(mtc:p, system:p); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp system GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_042() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_042()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn new file mode 100644 index 000000000..bbf8f8575 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the unmap operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_043 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp system GeneralComp return boolean { + unmap(mtc:p, system:p); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp system GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_043() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + map(mtc:p, system:p); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_043()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn new file mode 100644 index 000000000..7b1d6fda2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the action operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_044 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + action("My action"); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_044() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_044()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn new file mode 100644 index 000000000..94510217c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the timer.start operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_045 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.start; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_045() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_045()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn new file mode 100644 index 000000000..25e02aa94 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the timer.stop operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_046 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + tc_tmr.stop; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_046() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_046()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn new file mode 100644 index 000000000..0410c0ea7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the timer.running operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_047 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 5.0; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.running) { return true; } + else { return false; } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_047() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_047()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn new file mode 100644 index 000000000..9b66e4e9a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the read operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_048 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + if (tc_tmr.read > 0.0) { return true; } + else { return false; } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_048() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_048()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn new file mode 100644 index 000000000..cba7424eb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the timeout operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_049 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + timer tc_tmr := 0.1; + } + + function f_test() runs on GeneralComp return boolean { + any timer.timeout; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_049() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_049()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn new file mode 100644 index 000000000..051cbac9f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that a non-deterministic external function call cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_050 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_2002_TheAltStatement_050() return boolean; + + function f_test() runs on GeneralComp return boolean { + if (xf_NegSem_2002_TheAltStatement_050()) { return true; } + else { return true; } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_050() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_050()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn new file mode 100644 index 000000000..622357507 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the predefined rnd function cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_051 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + if (rnd() > 0.5) { return true; } + else { return true; } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_051() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_051()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn new file mode 100644 index 000000000..24bcf7263 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify a function called in a guard of an altstep cannot contain an assignment of a component variable + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_052 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_test() runs on GeneralComp return boolean { + vc_int := 1; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_052() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_052()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn new file mode 100644 index 000000000..4a468b57b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify a function called in a guard of an altstep cannot contain a component variable used as an actual out parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_053 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int; + } + + function f_out (out integer p_out) { + p_out := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_out(vc_int); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_053() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_053()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn new file mode 100644 index 000000000..d623ba785 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify a function called in a guard of an altstep cannot contain a component variable used as an actual inout parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_054 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer vc_int := 0; + } + + function f_inout (inout integer p_inout) { + p_inout := 1; + } + + function f_test() runs on GeneralComp return boolean { + f_inout(vc_int); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_054() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_054()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn new file mode 100644 index 000000000..5590b241e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the setverdict operation cannot be used in guard statements of altstep + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_055 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + setverdict(pass); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_055() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_055()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn new file mode 100644 index 000000000..f2a44a68e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the activate operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_056 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + activate(a_anyTimer()); + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_056() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_056()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn new file mode 100644 index 000000000..784ce5ca5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the deactivate operation cannot be used in parameters of altsteps invoked from an alt branch + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_057 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + function f_test() runs on GeneralComp return boolean { + deactivate; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_057() runs on GeneralComp system GeneralComp { + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test()); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_057()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn new file mode 100644 index 000000000..144a7366e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that a function used in a parameter of an altstep invoked from an alt branch cannot contain out parameters + ** @verdict pass reject +***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_058 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test(out integer p_par) runs on GeneralComp return boolean { + p_par := 1; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_058() runs on GeneralComp system GeneralComp { + var integer v_int := 0; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_int)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_058()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn new file mode 100644 index 000000000..0e1daa23f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that a function used in a parameter of an altstep invoked from an alt branch cannot contain inout parameters + ** @verdict pass reject +***************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_059 { + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_test(inout integer p_par) runs on GeneralComp return boolean { + p_par := 1; + return true; + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_059() runs on GeneralComp system GeneralComp { + var integer v_int := 0; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(f_test(v_int)); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_059()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn new file mode 100644 index 000000000..84c7e8093 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the read operation cannot be used in guard statements + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// b) The evaluation of a Boolean expression guarding an alternative shall not have side effects. To avoid side effects +// that cause an inconsistency between the actual snapshot and the state of the component, the same restrictions +// as the restrictions for the initialization of local definitions within altsteps (clause 16.2) and the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply. + +module NegSem_2002_TheAltStatement_060 { + + type port MyPort message { + inout charstring + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_060() runs on GeneralComp { + timer t_tmr := 1.0; + t_tmr.start; + + connect(self:p, self:p); + p.send(m_test); + + alt { + [t_tmr.read > 0.0] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_060()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn new file mode 100644 index 000000000..c41aa0ba8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the checkstate operation cannot be used in guard statements + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// b) The evaluation of a Boolean expression guarding an alternative shall not have side effects. To avoid side effects +// that cause an inconsistency between the actual snapshot and the state of the component, the same restrictions +// as the restrictions for the initialization of local definitions within altsteps (clause 16.2) and the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply. + +module NegSem_2002_TheAltStatement_061 { + + type port MyPort message { + inout charstring + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_061() runs on GeneralComp { + connect(self:p, self:p); + p.send(m_test); + + alt { + [p.checkstate("Started")] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_061()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn new file mode 100644 index 000000000..499b0c3f0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the read operation cannot be used in alt branch events (in inline templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_062 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_062() runs on GeneralComp system GeneralComp { + timer t_tmr := 1.0; + + connect(self:p, self:p); + t_tmr.start; + p.send(true); + + alt { + [] p.receive(boolean:t_tmr.read > 0.0) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_062()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn new file mode 100644 index 000000000..8a7b594aa --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the checkstate operation cannot be used in alt branch events (in inline templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_063 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_063() runs on GeneralComp system GeneralComp { + + connect(self:p, self:p); + p.send(true); + alt { + [] p.receive(boolean:p.checkstate("Started")) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_063()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn new file mode 100644 index 000000000..24a35e104 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the read operation cannot be used in parameters of alt branch events + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_064 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + altstep a_receive(boolean p_bool) runs on GeneralComp { + [] p.receive(p_bool) { + setverdict(pass); + } + } + + testcase TC_NegSem_2002_TheAltStatement_064() runs on GeneralComp system GeneralComp { + timer t_tmr := 1.0; + connect(self:p, self:p); + t_tmr.start; + p.send(true); + alt { + [] a_receive(t_tmr.read > 0.0); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_064()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn new file mode 100644 index 000000000..0f620342a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the checkstate operation cannot be used in parameters of alt branch events + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_065 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + altstep a_receive(boolean p_bool) runs on GeneralComp { + [] p.receive(p_bool) { + setverdict(pass); + } + } + + testcase TC_NegSem_2002_TheAltStatement_065() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + p.send(true); + alt { + [] a_receive(p.checkstate("Started")); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_065()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn new file mode 100644 index 000000000..3438b3a12 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the create operation cannot be used in alt branch events + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_066 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_066() runs on GeneralComp system GeneralComp { + var template @fuzzy boolean mw_msg := (GeneralComp.create != null); + connect(self:p, self:p); + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_066()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn new file mode 100644 index 000000000..868d8ebdc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the component.running operation cannot be used in alt branch events (in templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_067 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + function f_test() runs on GeneralComp { + } + + testcase TC_NegSem_2002_TheAltStatement_067() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_test()); + + var template @fuzzy boolean mw_msg := v_ptc.running; + connect(self:p, self:p); + + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_067()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn new file mode 100644 index 000000000..d80d77775 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the alive operation cannot be used in alt branch events (in templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_068 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_068() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + + var template @fuzzy boolean mw_msg := v_ptc.alive; + connect(self:p, self:p); + p.send(true); + + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_068()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn new file mode 100644 index 000000000..2d92983cb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the checkstate operation cannot be used in alt branch events (in templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_069 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_069() runs on GeneralComp system GeneralComp { + var template @fuzzy boolean mw_msg := p.checkstate("Started"); + connect(self:p, self:p); + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_069()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn new file mode 100644 index 000000000..b7ae46e01 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the timer.running operation cannot be used in alt branch events (in templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_070 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_070() runs on GeneralComp system GeneralComp { + timer t_tmr := 4.0; + t_tmr.start; + + var template @fuzzy boolean mw_msg := t_tmr.running; + + connect(self:p, self:p); + + p.send(true); + + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_070()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn new file mode 100644 index 000000000..1f0e63eb3 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the read operation cannot be used in alt branch events (in templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_071 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_071() runs on GeneralComp system GeneralComp { + timer t_tmr := 4.0; + t_tmr.start; + + connect(self:p, self:p); + + var template @fuzzy boolean mw_msg := t_tmr.read > 0.0; //the program is too quick, do not to put this earlier in the code + p.send(true); + + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_071()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn new file mode 100644 index 000000000..043edbfb5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the activate operation cannot be used in alt branch events (in templates) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_072 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + altstep a_timeout() { + [] any timer.timeout { + } + } + + testcase TC_NegSem_2002_TheAltStatement_072() runs on GeneralComp system GeneralComp { + var template @fuzzy boolean mw_msg := activate(a_timeout()) != null; + + connect(self:p, self:p); + p.send(true); + + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_072()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn new file mode 100644 index 000000000..2bbdb8008 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the create operation cannot be used in alt branch events (in inline template) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_073 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_073() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + p.send(true); + alt { + [] p.receive(mw_msg(GeneralComp.create != null)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_073()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn new file mode 100644 index 000000000..352985e3c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the component.running operation cannot be used in alt branch events (in template parameters) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_074 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + function f_test() runs on GeneralComp { + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_074() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_test()); + + connect(self:p, self:p); + p.send(true); + alt { + [] p.receive(mw_msg(v_ptc.running)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_074()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn new file mode 100644 index 000000000..7845e98d1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the alive operation cannot be used in alt branch events (in template parameters) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_075 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_075() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + + connect(self:p, self:p); + p.send(true); + + alt { + [] p.receive(mw_msg(v_ptc.alive)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_075()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn new file mode 100644 index 000000000..9d4424169 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the checkstate operation cannot be used in alt branch events (in template parameters) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_076 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_076() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + p.send(true); + alt { + [] p.receive(mw_msg(p.checkstate("Started"))) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_076()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn new file mode 100644 index 000000000..bdba5ae75 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the timer.running operation cannot be used in alt branch events (in template parameters) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_077 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_077() runs on GeneralComp system GeneralComp { + timer t_tmr := 4.0; + connect(self:p, self:p); + t_tmr.start; + p.send(true); + alt { + [] p.receive(mw_msg(t_tmr.running)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_077()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn new file mode 100644 index 000000000..c60cfe990 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the read operation cannot be used in alt branch events (in template parameters) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_078 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_078() runs on GeneralComp system GeneralComp { + timer t_tmr := 4.0; + connect(self:p, self:p); + t_tmr.start; + p.send(true); + alt { + [] p.receive(mw_msg(t_tmr.read > 0.0)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_078()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn new file mode 100644 index 000000000..842d4f1f6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the activate operation cannot be used in alt branch events (in template parameters) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// c) The evaluation of the event of an alt branch shall not have side effects. To avoid side effects that cause +// an inconsistency between the actual snapshot and the state of the component or introduce indeterminism +// in the evaluation of the following alt branches or the re-evaluation of the same alt branch, the restrictions +// imposed on the contents of functions called from special places (clause 16.1.4) shall apply to expressions +// occurring in the matching part of an alternative. + +module NegSem_2002_TheAltStatement_079 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + altstep a_timeout() { + [] any timer.timeout { + } + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_079() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + p.send(true); + alt { + [] p.receive(mw_msg(activate(a_timeout()) != null)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_079()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn new file mode 100644 index 000000000..ec11ebd3a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the create operation cannot be used in alt branch events (in inline template) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_080 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := GeneralComp.create != null; + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_080() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_080()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn new file mode 100644 index 000000000..b55911960 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the component.running operation cannot be used in altstep declarations + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_081 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + var GeneralComp v_ptc; + } + + function f_test() runs on GeneralComp { + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := v_ptc.running; + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_081() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + v_ptc.start(f_test()); + + connect(self:p, self:p); + p.send(true); + + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_081()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn new file mode 100644 index 000000000..f36023805 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the alive operation cannot be used in altstep declarations + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_082 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + var GeneralComp v_ptc; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := v_ptc.alive; + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_082() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create alive; + + connect(self:p, self:p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_082()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn new file mode 100644 index 000000000..0b3dcbbe2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the checkstate operation cannot be used in altstep declarations + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_083 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := p.checkstate("Started"); + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_083() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_083()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn new file mode 100644 index 000000000..c556d7dfd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the timer.running operation cannot be used in altstep declarations + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_084 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + timer t_tmr := 1.0; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := t_tmr.running; + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_084() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + t_tmr.start; + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_084()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn new file mode 100644 index 000000000..ccb1ecfb7 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the read operation cannot be used in altstep declarations + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_085 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + timer t_tmr := 1.0; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := t_tmr.read > 0.0; + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_085() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + t_tmr.start; + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_085()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn new file mode 100644 index 000000000..e22789545 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:20.2, verify that the activate operation cannot be used in altstep declarations + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// d) The evaluation of an altstep invoked from an alt branch, if none of the alternatives in the altstep is chosen, shall +// not have side effects. To avoid side effects the restrictions imposed on the contents of functions called from special +// places (clause 16.1.4) shall apply to the actual parameters of the invoked altstep. + +module NegSem_2002_TheAltStatement_086 { + + type port MyPort message { + inout boolean + } with {extension "internal"} + + type component GeneralComp { + port MyPort p; + } + + altstep a_timeout() { + [] any timer.timeout{ + } + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := (activate(a_timeout()) != null); + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_086() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_086()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/xf_NegSem_2002_TheAltStatement_050.cc b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/xf_NegSem_2002_TheAltStatement_050.cc new file mode 100644 index 000000000..f27cbad8a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/20_statement_and_operations_for_alt/2002_the_alt_statement/xf_NegSem_2002_TheAltStatement_050.cc @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +#include "NegSem_2002_TheAltStatement_050.hh" + +namespace NegSem__2002__TheAltStatement__050 +{ + + BOOLEAN xf__NegSem__2002__TheAltStatement__050() + { + return true; + } +} diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn index 67d8a27b6..b1b62daf4 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn @@ -28,7 +28,7 @@ // 4) inlist-PORT2 defines the messages or procedures of the in-direction of PORT2; and // 5) outlist-PORT2 defines the messages or procedures of the out-direction of PORT2. // b) The connect operation is allowed if and only if: -// outlist-PORT1 ⊆ inlist-PORT2 and outlist-PORT2 ⊆ inlist-PORT1. +// outlist-PORT1 ⊆ inlist-PORT2 and outlist-PORT2 ⊆ inlist-PORT1. // // In this test, outlist-PORT1 == inlist-PORT2 and outlist-PORT2 == inlist-PORT1 diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn index efb466629..b5b9f3ae5 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn @@ -29,7 +29,7 @@ // 5) outlist-PORT2 defines the messages or procedures of the out-direction of PORT2. // c) The map operation (assuming PORT2 is the test system interface port) is allowed if // and only if: -// outlist-PORT1 ⊆ outlist-PORT2 and inlist-PORT2 ⊆ inlist-PORT1. +// outlist-PORT1 ⊆ outlist-PORT2 and inlist-PORT2 ⊆ inlist-PORT1. // // In this test, outlist-PORT1 == outlist-PORT2 and inlist-PORT2 == inlist-PORT1 diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn index cc86d6311..401278671 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn @@ -29,9 +29,9 @@ // 5) outlist-PORT2 defines the messages or procedures of the out-direction of PORT2. // c) The map operation (assuming PORT2 is the test system interface port) is allowed if // and only if: -// outlist-PORT1 ⊆ outlist-PORT2 and inlist-PORT2 ⊆ inlist-PORT1. +// outlist-PORT1 ⊆ outlist-PORT2 and inlist-PORT2 ⊆ inlist-PORT1. // -// In this test, outlist-PORT1 ⊂ outlist-PORT2 and inlist-PORT2 == inlist-PORT1 +// In this test, outlist-PORT1 ⊆ outlist-PORT2 and inlist-PORT2 == inlist-PORT1 module Sem_210101_connect_and_map_operations_006 { type record R { diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn index 75ad8a9cc..0e99cb546 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn @@ -1,5 +1,19 @@ -/***************************************************************** - ** @author STF 433, STF 470 +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * ** @version 0.0.2 ** @purpose 1:21.1.1, Ensure that map param statements are allowed in testcase block ** @verdict pass accept, ttcn3verdict:pass diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn index a335eafce..4a93b347d 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn @@ -1,5 +1,19 @@ -/***************************************************************** - ** @author STF 433, STF 470 +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * ** @version 0.0.2 ** @purpose 1:21.1.2, Ensure that unmap param statements are allowed in testcase block ** @verdict pass accept, ttcn3verdict:pass diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn index 91e5dee3e..a6be261d2 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn @@ -1,5 +1,19 @@ -/*************************************************** - ** @author STF 451, STF 470 +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * ** @version 0.0.2 ** @purpose 1:21.1.2, Ensure that all component notation work correctly in disconnect operation ** @verdict pass accept, ttcn3verdict:pass diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn index 161623c2b..b3cee5d92 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn @@ -1,5 +1,19 @@ -/*************************************************** - ** @author STF 451, STF 470 +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * ** @version 0.0.2 ** @purpose 1:21.1.1, Ensure that disconnect has no effect on components that are not connected ** @verdict pass accept, ttcn3verdict:pass diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn index 6bfe9e45b..0986fa046 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn @@ -1,5 +1,19 @@ -/*************************************************** - ** @author STF 451, STF 470 +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * ** @version 0.0.2 ** @purpose 1:21.1.2, Ensure that umnap operation of a system and component port works correctly ** @verdict pass accept, ttcn3verdict:pass diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn index 4c144f12d..a4bd449db 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn @@ -1,5 +1,19 @@ -/*************************************************** - ** @author STF 451, STF 470 +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * ** @version 0.0.2 ** @purpose 1:21.1.2, Ensure that umnap operation of a component and system port works correctly ** @verdict pass accept, ttcn3verdict:pass diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn new file mode 100644 index 000000000..715e42f98 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:21.3.2, altstep in test component start operation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The start operation shall bind the required behaviour to the test component. This +// behaviour is defined by reference to an already defined function or altstep. +// NOTE: altstep support added in TTCN-3:2016 -> the test was changed to positive one. + +module Sem_210302_Start_test_component_011 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a_test() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_Sem_210302_Start_test_component_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.send(1); + v_ptc.start(a_test()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_011()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn new file mode 100644 index 000000000..561cef92e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:21.3.2, Ensure that start operation works with parametered altsteps + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirement is tested: The start operation shall bind the required behaviour to the test component. +// This behaviour is defined by reference to an already defined function or altstep. + +module Sem_210302_Start_test_component_012 { + + type port myPortType message { + inout integer; + } + + type component GeneralComp { + port myPortType myPort; + } + + altstep a_myBehaviour(in integer p_int) runs on GeneralComp { + + [] any port.receive { + setverdict(pass); + } + } + + + testcase TC_Sem_210302_Start_test_component_012() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + + connect(mtc:myPort, v_ptc:myPort); + myPort.send(1); + + v_ptc.start(a_myBehaviour(1)); + v_ptc.done; + + setverdict(pass); + } + + control { + execute(TC_Sem_210302_Start_test_component_012()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn new file mode 100644 index 000000000..4db4af567 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:21.3.2, Ensure that inout parameters will be passed to the function by value, i.e. like in-parameters. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Actual inout parameters will be passed to the function by value, i.e. like in-parameters. + +module Sem_210302_Start_test_component_013 { + + type component GeneralComp {} + + function f(inout integer v_in) runs on GeneralComp { + if( match(v_in, 5) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + testcase TC_Sem_210302_Start_test_component_013() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + var integer v_var := 5; + v_ptc.start(f(v_var)); + v_ptc.done; + } + + control { + execute(TC_Sem_210302_Start_test_component_013()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn new file mode 100644 index 000000000..2512eed3f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:21.3.2, Ensure that inout parameters will be passed to the function by value, i.e. like in-parameters. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Possible return values of a function invoked in a start test component operation, +// i.e. templates denoted by return keyword or inout and out parameters, have no effect +// when the started test component terminates. + +module Sem_210302_Start_test_component_014 { + + type component GeneralComp { + var integer v_var := 5; + } + + function f() runs on GeneralComp return integer { + v_var := 1; + return v_var; // return value v_var:=1 + } + + testcase TC_Sem_210302_Start_test_component_014() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create alive; + v_ptc.start(f()); + v_ptc.done; + + if(match(v_var,5)){ + setverdict(pass); + } + else { + setverdict(fail,v_var); + } + } + + control { + execute(TC_Sem_210302_Start_test_component_014()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn index 9943d4955..73a32d907 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn @@ -30,6 +30,9 @@ module Sem_210303_Stop_test_component_005 { } function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 1.0; + t_tmr.start; + t_tmr.timeout; } function f_ptcSecondBehaviour() runs on GeneralComp { diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn index 5b04a7801..d31288d44 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn @@ -32,8 +32,6 @@ module NegSem_210305_alive_operation_002 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_NegSem_210305_alive_operation_002() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 4; @@ -41,7 +39,7 @@ module NegSem_210305_alive_operation_002 { var integer v_index[1]; for (var integer i := 0; i < c_size; i := i + 1) { v_ptc[i] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0) { v_ptc[i].start(f_done()); } //quick done components on even indices + if (i mod 2 == 0) { v_ptc[i].kill; } //kill components on even indices else { v_ptc[i].start(f());} // activate v_ptc } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn index c8d1c73a0..473baf9e5 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn @@ -32,8 +32,6 @@ module NegSem_210305_alive_operation_003 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_NegSem_210305_alive_operation_003() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 4; @@ -41,7 +39,7 @@ module NegSem_210305_alive_operation_003 { var float v_index; for (var integer i := 0; i < c_size; i := i + 1) { v_ptc[i] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0) { v_ptc[i].start(f_done()); } //quick done components on even indices + if (i mod 2 == 0) { v_ptc[i].kill; } //kill components on even indices else { v_ptc[i].start(f());} // activate v_ptc } v_isAlive := any from v_ptc.alive -> @index value v_index; diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn index 79828c438..95d0d0e05 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn @@ -34,8 +34,6 @@ module NegSem_210305_alive_operation_004 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_NegSem_210305_alive_operation_004() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 3; @@ -44,7 +42,7 @@ module NegSem_210305_alive_operation_004 { for (var integer i := 0; i < c_size; i := i + 1) { for (var integer j := 0; j < c_size; j := j + 1) { v_ptc[i][j] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i][j].start(f_done()); } //quick done components on even i or odd j + if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i].kill; } //kill components on even i or odd j else { v_ptc[i][j].start(f());} // activate v_ptc } } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn index c972de493..c135c7f0b 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn @@ -34,8 +34,6 @@ module NegSem_210305_alive_operation_005 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_NegSem_210305_alive_operation_005() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 3; @@ -44,7 +42,7 @@ module NegSem_210305_alive_operation_005 { for (var integer i := 0; i < c_size; i := i + 1) { for (var integer j := 0; j < c_size; j := j + 1) { v_ptc[i][j] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i][j].start(f_done()); } //quick done components on even i or odd j + if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i].kill; } //kill components on even i or odd j else { v_ptc[i][j].start(f());} // activate v_ptc } } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn index af582425f..bac3f2abb 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn @@ -31,8 +31,6 @@ module Sem_210305_alive_operation_009 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_Sem_210305_alive_operation_009() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 4; @@ -41,7 +39,7 @@ module Sem_210305_alive_operation_009 { for (var integer i := 0; i < c_size; i := i + 1) { v_ptc[i] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0) { v_ptc[i].start(f_done()); } // quick done components on even indices + if (i mod 2 == 0) { v_ptc[i].kill; } // kill components on even indices else { v_ptc[i].start(f());} // activate v_ptc } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn index 40a2254f2..e521056b4 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn @@ -31,8 +31,6 @@ module Sem_210305_alive_operation_010 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_Sem_210305_alive_operation_010() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 4; @@ -41,7 +39,7 @@ module Sem_210305_alive_operation_010 { for (var integer i := 0; i < c_size; i := i + 1) { v_ptc[i] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0) { v_ptc[i].start(f_done()); } // quick done components on even indices + if (i mod 2 == 0) { v_ptc[i].kill; } // kill components on even indices else { v_ptc[i].start(f());} // activate PTC } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn index 547334ada..e7e74b2b1 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn @@ -34,8 +34,6 @@ module Sem_210305_alive_operation_011 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_Sem_210305_alive_operation_011() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 3; @@ -45,7 +43,7 @@ module Sem_210305_alive_operation_011 { for (var integer i := 0; i < c_size; i := i + 1) { for (var integer j := 0; j < c_size; j := j + 1) { v_ptc[i][j] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i][j].start(f_done()); } //quick done components on even i or odd j + if (i mod 2 == 0 or j mod 2 == 1) { v_ptc[i][j].kill; } //kill components on even i or odd j else { v_ptc[i][j].start(f());} // activate v_ptc } } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn index 50ea094c1..b6745932a 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn @@ -33,8 +33,6 @@ module Sem_210305_alive_operation_013 { t.start; t.timeout; } - - function f_done() runs on GeneralComp {} testcase TC_Sem_210305_alive_operation_013() runs on GeneralComp system GeneralComp { var boolean v_isAlive; @@ -44,7 +42,7 @@ module Sem_210305_alive_operation_013 { for (var integer i := 0; i < c_size; i := i + 1) { v_ptc[i] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0) { v_ptc[i].start(f_done()); } // quick done components on even indices + if (i mod 2 == 0) { v_ptc[i].kill; } // kill components on even indices else { v_ptc[i].start(f());} // activate v_ptc } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn index 9b82f59b8..b241b0956 100644 --- a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn @@ -34,8 +34,6 @@ module Sem_210305_alive_operation_014 { t.timeout; } - function f_done() runs on GeneralComp {} - testcase TC_Sem_210305_alive_operation_014() runs on GeneralComp system GeneralComp { var boolean v_isAlive; const integer c_size := 4; @@ -44,7 +42,7 @@ module Sem_210305_alive_operation_014 { for (var integer i := 0; i < c_size; i := i + 1) { v_ptc[i] := GeneralComp.create; // created components are inactive - if (i mod 2 == 0) { v_ptc[i].start(f_done()); } // quick done components on even indices + if (i mod 2 == 0) { v_ptc[i].kill; } // kill components on even indices else { v_ptc[i].start(f());} // activate v_ptc } diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn new file mode 100644 index 000000000..b351fba30 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:21.3.5, Ensure that alive applied on the mtc the operation returns true. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//// The following requirement is tested: Alive operation applied on the mtc the operation returns true. + +module Sem_210305_alive_operation_015 { + + type component GeneralComp {} + + testcase TC_Sem_210305_alive_operation_015() runs on GeneralComp system GeneralComp { + + if (mtc.alive) { + setverdict(pass); + } + else + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_210305_alive_operation_015()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn new file mode 100644 index 000000000..f3e800f3d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:21.3.6, Check that running operator provides information about mtc. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// // The following requirement is tested: The running operation returns true for the mtc and PTCs that have been started but not yet terminated or stopped. + +module Sem_210306_running_operation_013 { + + type component GeneralComp {} + + function f1 ( ) runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_013() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create alive; + + ptc.start(f1()); + + // Check that ptc is running, and mtc component is running + if (match(ptc.running, true) and match(mtc.running, true)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + control { + execute(TC_Sem_210306_running_operation_013()); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn index e486ecbec..650f04a06 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn @@ -20,8 +20,9 @@ *****************************************************************/ // The following requirements are tested: -// AddressRef shall be of type address, component or of the type provided in the address -// declaration of the port type of the port instance referenced in the send operation. +// All AddressRef items in the to clause shall be of type address, component or of the +// address type bound to the port type (see clause 6.2.9) of the port instance referenced +// in the send operation. module NegSem_220201_SendOperation_008 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn index 0f7dd4c9c..fe2349f2a 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220201_SendOperation_009 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn index 27580385e..5f7882b76 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220201_SendOperation_010 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn new file mode 100644 index 000000000..fad13ad0b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.2.2, verify that a variable of a different but compatible type can be used in a redirect assignment + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The assignment part in a receiving operation is optional. For message-based ports it is used when it is +// required to store received messages. In the case of procedure-based ports it is used for storing the in +// and inout parameters of an accepted call, for storing the return value or for storing exceptions. +// For the message or parameter value assignment part strong typing is not required, e.g. the variable used +// for storing a message shall be type-compatible to the type of the incoming message. + +module Sem_220202_ReceiveOperation_030 { + + type port P message { + inout integer; + } with {extension "internal"} + + type integer UInt8 (0..255); + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_030() runs on GeneralComp { + var UInt8 v_int; + connect(self:p, self:p); + + p.send(10); + p.receive(integer:?) -> value v_int; + + if (v_int == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_030(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn new file mode 100644 index 000000000..cb748ff08 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.2.3, trying to store an incompatible component value in the sender clause of a trigger operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Type mismatch at storing the received value or parts of the received value and storing +// the sender shall cause an error. + +module NegSem_220203_TriggerOperation_024 { + + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp + { + port P p; + } + + type component CustomComp { + var integer vc_int; + } + + testcase TC_NegSem_220203_TriggerOperation_024() runs on GeneralComp system GeneralComp { + var CustomComp v_sender; + timer t_tmr := 0.1; + t_tmr.start; + connect(self:p, self:p); + p.send(10); + alt { + // this alternative shall be selected, but the assignment shall generate an error + [] p.trigger(integer:?) -> sender v_sender { } + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_024(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn index 0a3862c99..d7dd701a2 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn @@ -20,11 +20,10 @@ *****************************************************************/ // The following requirements are tested: -// The matching criteria as defined in clause 22.2.2 apply also to the trigger -// operation. -// In the case of one-to-many connections the [trigger] operation may be restricted +// In the case of one-to-many connections the trigger operation may be restricted // to a certain communication partner. This restriction shall be denoted using the -// from keyword. +// from keyword followed by a specification of an address or component reference, +// a list of address or component references or any component. module Sem_220203_TriggerOperation_006 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn index 802a637f3..793b39751 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn @@ -20,11 +20,10 @@ *****************************************************************/ // The following requirements are tested: -// The matching criteria as defined in clause 22.2.2 apply also to the trigger -// operation. -// In the case of one-to-many connections the [trigger] operation may be restricted +// In the case of one-to-many connections the trigger operation may be restricted // to a certain communication partner. This restriction shall be denoted using the -// from keyword. +// from keyword followed by a specification of an address or component reference, +// a list of address or component references or any component. module Sem_220203_TriggerOperation_007 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn index 740a912d6..7d15d61e5 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn @@ -20,11 +20,10 @@ *****************************************************************/ // The following requirements are tested: -// The matching criteria as defined in clause 22.2.2 apply also to the trigger -// operation. -// In the case of one-to-many connections the [trigger] operation may be restricted +// In the case of one-to-many connections the trigger operation may be restricted // to a certain communication partner. This restriction shall be denoted using the -// from keyword. +// from keyword followed by a specification of an address or component reference, +// a list of address or component references or any component. module Sem_220203_TriggerOperation_008 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn index 9faec9391..53af1de25 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220301_CallOperation_003 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn index 72cc149f6..6eef39eed 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220301_CallOperation_004 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn new file mode 100644 index 000000000..f4116362a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, incompatible template in the to clause of the call operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) All AddressRef items in the to clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type (see +// section 6.2.9) of the port instance referenced in the call operation. + +module NegSem_220301_CallOperation_005 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220301_CallOperation_005() runs on GeneralComp system GeneralComp { + var charstring v_addr := "addr"; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait) to v_addr; + setverdict(pass); + } + + control { + execute(TC_NegSem_220301_CallOperation_005(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn new file mode 100644 index 000000000..cc99c0194 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that non-blocking calls cannot have a response and exception handling part + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// In case of non-blocking procedure-based communication the handling of exceptions +// to call operations is done by using catch (see clause 22.3.6) operations as +// alternatives in alt statements. +// A non-blocking procedure has no out and inout parameters, no return value and the +// non-blocking property is indicated in the corresponding signature definition by means +// of a noblock keyword. Possible exceptions raised by non-blocking procedures have to be +// removed from the port queue by using catch operations in subsequent alt or interleave +// statements. + +module NegSem_220301_CallOperation_006 { + + signature S() noblock; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:?); + p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_called); + p.call(S:{}) { + [] p.getreply(S:{}) {} + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_006(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn new file mode 100644 index 000000000..1e54c9c19 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that signature that are not listed in the port inout and out list cannot be used in call operations + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// a) The call operation shall only be used on procedure-based ports. The type definition +// of the port at which the call operation takes place shall include the procedure name +// in its out or inout list i.e. it shall be allowed to call this procedure at this port. + +module NegSem_220301_CallOperation_007 { + + signature S1() noblock; + signature S2() noblock; + + type port P procedure { + inout S1; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220301_CallOperation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(S2:{}); // error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_007(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn new file mode 100644 index 000000000..a3653b9bc --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that in parameters of a signature used in a call operation cannot contain matching symbols + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220301_CallOperation_008 { + + signature S(in integer p_par) noblock; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := ? }; + + testcase TC_NegSem_220301_CallOperation_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1); + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_008(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn new file mode 100644 index 000000000..2aebb6298 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that in parameters of a signature used in a call operation cannot be omitted + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220301_CallOperation_009 { + + signature S(in integer p_par) noblock; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := - }; + + testcase TC_NegSem_220301_CallOperation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1); + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_009(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn new file mode 100644 index 000000000..16cb18967 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that inout parameters of a signature used in a call operation cannot contain matching symbols + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220301_CallOperation_010 { + + signature S(inout integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := ? }; + + testcase TC_NegSem_220301_CallOperation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1, nowait); + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_010(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn new file mode 100644 index 000000000..a0d0c4556 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that inout parameters of a signature used in a call operation cannot be omitted + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// b) All in and inout parameters of the signature shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220301_CallOperation_011 { + + signature S(inout integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := - }; + + testcase TC_NegSem_220301_CallOperation_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1, nowait); + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_011(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn new file mode 100644 index 000000000..6d2ad4e5c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn @@ -0,0 +1,66 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, missing to clause in case of one-to-many connections + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// e) A to clause shall be present in case of one-to-many connections. + +module NegSem_220301_CallOperation_012 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_012() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create; + + var integer v_counter := 0; + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + + p.call(S:{}) { // error expected as the to clause is missing + [] p.getreply(S:{}) { + v_counter := v_counter + 1; + if (v_counter < 2) { + repeat; + } else { + setverdict(pass, "Both replies received"); } + } + } + } + + control { + execute(TC_NegSem_220301_CallOperation_012(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn new file mode 100644 index 000000000..646cb6d6c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that type mismatch error is issued for incorrect call timer values + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// g) CallTimerValue shall be of type float. + +module NegSem_220301_CallOperation_013 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_013() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}, 2) { // error expected as 2 is an integer literal + [] p.getreply(S:{}) {} + [] p.catch(timeout) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220301_CallOperation_013(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn new file mode 100644 index 000000000..fe469a972 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that getreply signature mismatch in the response and exception handling causes an error + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// h) The selection of the alternatives to a call shall only be based on getreply and catch operations +// for the called procedure. Unqualified getreply and catch operations shall only treat replies from +// and exceptions raised by the called procedure. + +module NegSem_220301_CallOperation_014 { + + signature S1(); + signature S2(); + + type port P procedure { + inout S1, S2; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S1:{}); + p.reply(S1:{}); + } + + testcase TC_NegSem_220301_CallOperation_014() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S1:{}) { + [] p.getreply(S1:{}) { setverdict(pass, "Reply accepted"); } + [] p.getreply(S2:{}) {} // error expected + } + } + + control { + execute(TC_NegSem_220301_CallOperation_014(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn new file mode 100644 index 000000000..84156eb02 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that exception signature mismatch in the response and exception handling causes an error + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// h) The selection of the alternatives to a call shall only be based on getreply and catch operations +// for the called procedure. Unqualified getreply and catch operations shall only treat replies from +// and exceptions raised by the called procedure. + +module NegSem_220301_CallOperation_015 { + + signature S1() exception(integer); + signature S2() exception(charstring); + + type port P procedure { + inout S1, S2; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S1:{}); + p.raise(S1, 1); + } + + testcase TC_NegSem_220301_CallOperation_015() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S1:{}) { + [] p.catch(S1, integer:?) { setverdict(pass, "Exception caught!"); } + [] p.catch(S2, charstring:?) {} // expected error + } + } + + control { + execute(TC_NegSem_220301_CallOperation_015(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn new file mode 100644 index 000000000..ea8e3248c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that forbidden calls cannot appear in response and exception handling part guards + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// i) The evaluation of the Boolean expressions guarding the alternatives in the response +// and exception handling part may have side effects. In order to avoid unexpected side +// effects, the same rules as for the Boolean guards in alt statements shall be applied +// (see clause 20.2). + + +module NegSem_220301_CallOperation_016 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_016() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + timer t_tmr := 5.0; + t_tmr.start; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}) { + [t_tmr.read > 0.0] p.getreply(S:{}) + { setverdict(pass, "Reply accepted"); } // guard error expected + } + } + + control { + execute(TC_NegSem_220301_CallOperation_016(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn new file mode 100644 index 000000000..1205b5bde --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that forbidden functions cannot appear in response and exception handling part guards + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// i) The evaluation of the Boolean expressions guarding the alternatives in the response +// and exception handling part may have side effects. In order to avoid unexpected side +// effects, the same rules as for the Boolean guards in alt statements shall be applied +// (see clause 20.2). + +module NegSem_220301_CallOperation_017 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + var integer v_int := 0; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + function f_guard() runs on GeneralComp return boolean { + v_int := v_int + 1; + return v_int < 10; + } + + testcase TC_NegSem_220301_CallOperation_017() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}) { + [f_guard()] p.getreply(S:{}) + { setverdict(pass, "Reply accepted"); } // guard error expected + } + } + + control { + execute(TC_NegSem_220301_CallOperation_017(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn new file mode 100644 index 000000000..966edfefd --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that non-blocking procedure calls cannot contain timeout values + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// l) The call operation for a non-blocking procedure shall have no response and exception +// handling part, shall raise no timeout exception and shall not use the nowait keyword. + +module NegSem_220301_CallOperation_018 { + + signature S() noblock; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_018() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}, 1.0); + alt { + [] p.getreply(S:{}) + { setverdict(pass, "Reply accepted"); } // guard error expected + } + } + + control { + execute(TC_NegSem_220301_CallOperation_018(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn new file mode 100644 index 000000000..d04faf328 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn @@ -0,0 +1,57 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that non-blocking procedure calls cannot contain nowait parameter + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// l) The call operation for a non-blocking procedure shall have no response and exception +// handling part, shall raise no timeout exception and shall not use the nowait keyword. + +module NegSem_220301_CallOperation_019 { + + signature S() noblock; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + //p.getcall(S:{}); + //p.reply(S:{}); + } + + testcase TC_NegSem_220301_CallOperation_019() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}, nowait); + /*alt { + [] p.getreply(S:{}) + { setverdict(pass, "Reply accepted"); } // guard error expected + }*/ + } + + control { + execute(TC_NegSem_220301_CallOperation_019(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn new file mode 100644 index 000000000..712fbf51e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn @@ -0,0 +1,45 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that calls cannot be used on disconnected ports + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// m) Applying a call operation to an unmapped or disconnected port shall cause a test +// case error. + +module NegSem_220301_CallOperation_020 { + + signature S() noblock; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220301_CallOperation_020() runs on GeneralComp system GeneralComp { + p.call(S:{}); + } + + control { + execute(TC_NegSem_220301_CallOperation_020(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn new file mode 100644 index 000000000..9f82bd4b0 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn @@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that the response and exception handling part cannot contain an else clause + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// h) The use of else branches and the invocation of altsteps is not allowed. + +module NegSyn_220301_CallOperation_001 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSyn_220301_CallOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}) { + [] p.getreply(S:{}) { setverdict(pass); } + [else] {} // expected error + } + } + + control { + execute(TC_NegSyn_220301_CallOperation_001(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn new file mode 100644 index 000000000..203816e5a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that the response and exception handling part cannot contain an altstep + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// h) The use of else branches and the invocation of altsteps is not allowed. + +module NegSyn_220301_CallOperation_002 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + altstep a_handleReply() runs on GeneralComp { + [] p.getreply {} + } + + testcase TC_NegSyn_220301_CallOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}) { + [] p.getreply(S:{}) { setverdict(pass); } + [] a_handleReply() {} // expected error + } + } + + control { + execute(TC_NegSyn_220301_CallOperation_002(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn index 2171512e4..70a90355f 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn @@ -21,9 +21,7 @@ module Sem_220301_CallOperation_005 { - type charstring address; - const address c_client1Addr := "client1Addr"; - const address c_client2Addr := "client2Addr"; + type charstring address; /** * @desc testing of inline return template for remote procedure call @@ -59,14 +57,12 @@ module Sem_220301_CallOperation_005 { type component GeneralComp { port remotePort PCO; - var address v_myAddress; } - function f_ClientQuery(address p_myAddress) runs on GeneralComp { + function f_ClientQuery() runs on GeneralComp { var integer v_zero:=0; var integer v_one:=1; var boolean first:=true; - v_myAddress := p_myAddress; PCO.call(p_Sem_220301_CallOperation_005:s_callTemplate, 5.0) { @@ -75,7 +71,7 @@ module Sem_220301_CallOperation_005 { setverdict(pass); } [] PCO.catch (timeout) { - setverdict(fail, v_myAddress&" did not receive a response"); + setverdict(fail, "Component did not receive a response"); } } } @@ -107,11 +103,7 @@ module Sem_220301_CallOperation_005 { } } - - function f_setAddress(address p_myAddress) runs on GeneralComp { - v_myAddress := p_myAddress; - } - + testcase TC_Sem_220301_CallOperation_005() runs on GeneralComp system GeneralComp { var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); @@ -122,8 +114,8 @@ module Sem_220301_CallOperation_005 { server.start(f_ServerResponses()); - client.start(f_ClientQuery(c_client1Addr)); - client2.start(f_ClientQuery(c_client2Addr)); + client.start(f_ClientQuery()); + client2.start(f_ClientQuery()); interleave { [] client.done {} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn index 918084b66..84db3bb92 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn @@ -24,7 +24,6 @@ module Sem_220301_CallOperation_006 { type charstring address; const address c_server1Addr := "server1Addr"; const address c_server2Addr := "server2Addr"; - const address c_clientAddr := "clientAddr"; /** * @desc testing of inline return template for remote procedure call @@ -59,15 +58,12 @@ module Sem_220301_CallOperation_006 { type component GeneralComp { port remotePort PCO; - var address v_myAddress; } - function f_ClientQuery(address p_myAddress) runs on GeneralComp { + function f_ClientQuery() runs on GeneralComp { var integer v_zero:=0; var integer v_one:=1; timer t_timer:=5.0; - - v_myAddress := p_myAddress; // validate broadcast calling PCO.call(p_Sem_220301_CallOperation_006:s_callTemplate, nowait) to all component; @@ -103,12 +99,9 @@ module Sem_220301_CallOperation_006 { var integer v_par1; var integer v_par3; timer t_timeout:=30.0; - v_myAddress := p_myAddress; - - t_timeout.start; - + alt { [] PCO.getcall(p_Sem_220301_CallOperation_006:s_acceptTemplate) -> param(v_par1, v_par3) sender v_clientAddress { PCO.reply(p_Sem_220301_CallOperation_006:{p_par1 := 0, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to v_clientAddress; // p_par1 := -, core dump @@ -121,11 +114,6 @@ module Sem_220301_CallOperation_006 { } - - function f_setAddress(address p_myAddress) runs on GeneralComp { - v_myAddress := p_myAddress; - } - testcase TC_Sem_220301_CallOperation_006() runs on GeneralComp system GeneralComp { var GeneralComp server := GeneralComp.create("RemoteProcedure Service") alive; var GeneralComp server2 := GeneralComp.create("RemoteProcedure Service2") alive; @@ -135,10 +123,10 @@ module Sem_220301_CallOperation_006 { connect(server2:PCO, client:PCO); // set server address and start operation - server.start(f_ServerResponses(c_server1Addr)); - server2.start(f_ServerResponses(c_server2Addr)); + server.start(f_ServerResponses()); + server2.start(f_ServerResponses()); - client.start(f_ClientQuery(c_clientAddr)); + client.start(f_ClientQuery()); alt { [] client.done { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn index 93ca05ae9..6d4bc1350 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn @@ -24,7 +24,6 @@ module Sem_220301_CallOperation_007 { type charstring address; const address c_server1Addr := "server1Addr"; const address c_server2Addr := "server2Addr"; - const address c_clientAddr := "clientAddr"; /** * @desc testing of inline return template for remote procedure call @@ -59,15 +58,12 @@ module Sem_220301_CallOperation_007 { type component GeneralComp { port remotePort PCO; - var address v_myAddress; } - function f_ClientQuery(address p_myAddress) runs on GeneralComp { + function f_ClientQuery() runs on GeneralComp { var integer v_zero:=0; var integer v_one:=1; timer t_timer:=5.0; - - v_myAddress := p_myAddress; // validate multicast calling PCO.call(p_Sem_220301_CallOperation_007:s_callTemplate, nowait) to (c_server1Addr,c_server2Addr); @@ -103,11 +99,9 @@ module Sem_220301_CallOperation_007 { var integer v_par1; var integer v_par3; timer t_timeout:=30.0; - v_myAddress := p_myAddress; - - + t_timeout.start; - + alt { [] PCO.getcall(p_Sem_220301_CallOperation_007:s_acceptTemplate) -> param(v_par1, v_par3) sender v_clientAddress { PCO.reply(p_Sem_220301_CallOperation_007:{p_par1 := 0, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to v_clientAddress; // p_par1 := -, core dump @@ -120,11 +114,6 @@ module Sem_220301_CallOperation_007 { } - - function f_setAddress(address p_myAddress) runs on GeneralComp { - v_myAddress := p_myAddress; - } - testcase TC_Sem_220301_CallOperation_007() runs on GeneralComp system GeneralComp { var GeneralComp server := GeneralComp.create("RemoteProcedure Service") alive; var GeneralComp server2 := GeneralComp.create("RemoteProcedure Service2") alive; diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn new file mode 100644 index 000000000..3ac7b950c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that defaults are not executed in response and exception handling part of a call operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The response and exception handling part of a call operation is executed like an alt +// statement without any active default. + +module Sem_220301_CallOperation_009 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + timer t_tmr := 1.0; + p.getcall(S:{}); + t_tmr.start; + t_tmr.timeout; + p.reply(S:{}); + } + + altstep a_timeout() runs on GeneralComp { + [] any timer.timeout { setverdict(fail, "Timer timeout"); } + } + + testcase TC_Sem_220301_CallOperation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + timer t_tmr := 0.1; + t_tmr.start; + activate(a_timeout()); // activates a default which shouldn't be triggered in the call block + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}, 4.0) { // the local t_tmr timer should time out first, because the reply is delayed + [] p.getreply(S:{}) { setverdict(pass, "Reply received"); } + [] p.catch(timeout) { setverdict(fail, "Call timeout"); } + } + setverdict(pass); + } + + control { + execute(TC_Sem_220301_CallOperation_009(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn new file mode 100644 index 000000000..10f1ee97c --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn @@ -0,0 +1,54 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, blocking call with no timeout + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The call operation may optionally include a timeout. + +module Sem_220301_CallOperation_010 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_Sem_220301_CallOperation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}) { + [] p.getreply(S:{}) { setverdict(pass, "Reply received"); } + } + } + + control { + execute(TC_Sem_220301_CallOperation_010(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn new file mode 100644 index 000000000..99958ce53 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, blocking broadcast call with response and exception handling part and subsequent alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case of a multicast or broadcast call operation of a blocking procedure, two options exist. Either, +// only one response or exception is handled in the response and exception handling part of the call +// operation. Then, further responses and exceptions can be handled in subsequent alt or interleave +// statements. + +module Sem_220301_CallOperation_011 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_Sem_220301_CallOperation_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create; + + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + + p.call(S:{}) to all component { + [] p.getreply(S:{}) { setverdict(pass, "First reply received"); } // first reply + } + alt { + [] p.getreply(S:{}) { setverdict(pass, "Second reply received"); } // second reply + } + } + + control { + execute(TC_Sem_220301_CallOperation_011(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn new file mode 100644 index 000000000..6a0ff03e2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, blocking broadcast call with response and exception handling part handling all replies + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case of a multicast or broadcast call operation of a blocking procedure, two options exist. +// [2nd option:] +// Several responses or exceptions are handled by the use of repeat statements in one or more of the +// statement blocks of the response and exception handling part of the call operation: the execution +// of a repeat statement causes the re-evaluation of the call body. + +module Sem_220301_CallOperation_011 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_Sem_220301_CallOperation_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create; + var integer v_counter := 0; + + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + + p.call(S:{}) to all component { + [] p.getreply(S:{}) { + v_counter := v_counter + 1; + if (v_counter < 2) { + repeat; + } else { + setverdict(pass, "Both replies received"); } // expected result + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_011(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn new file mode 100644 index 000000000..c7c2b4af1 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn @@ -0,0 +1,83 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, blocking multicast call with response and exception handling part and subsequent alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case of a multicast or broadcast call operation of a blocking procedure, two options exist. Either, +// only one response or exception is handled in the response and exception handling part of the call +// operation. Then, further responses and exceptions can be handled in subsequent alt or interleave +// statements. + +module Sem_220301_CallOperation_012 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_Sem_220301_CallOperation_012() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create, + v_ptc3 := GeneralComp.create, + v_comp; + + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + connect(self:p, v_ptc3:p); + + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + v_ptc3.start(f_called()); + + p.call(S:{}) to (v_ptc1, v_ptc3) { + [] p.getreply(S:{}) -> sender v_comp { + if (v_comp == v_ptc1 or v_comp == v_ptc3) { + setverdict(pass, "First reply received"); + } else { + setverdict(fail, "Wrong component"); + } + } + } + + alt { + [] p.getreply(S:{}) -> sender v_comp { + if (v_comp == v_ptc1 or v_comp == v_ptc3) { + setverdict(pass, "Second reply received"); + } else { + setverdict(fail, "Wrong component"); + } + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_012(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn new file mode 100644 index 000000000..e415fe729 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn @@ -0,0 +1,81 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, blocking multicast call with response and exception handling part handling all replies + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case of a multicast or broadcast call operation of a blocking procedure, two options exist. +// [2nd option:] +// Several responses or exceptions are handled by the use of repeat statements in one or more of the +// statement blocks of the response and exception handling part of the call operation: the execution +// of a repeat statement causes the re-evaluation of the call body. + +module Sem_220301_CallOperation_013 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:?); + p.reply(S:{}); + } + + testcase TC_Sem_220301_CallOperation_013() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create, + v_ptc3 := GeneralComp.create, + v_comp; + + var integer v_counter := 0; + + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + connect(self:p, v_ptc3:p); + + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + v_ptc3.start(f_called()); + + p.call(S:{}) to (v_ptc1, v_ptc3) { + [] p.getreply(S:?) -> sender v_comp { + if (v_comp == v_ptc1 or v_comp == v_ptc3) { + v_counter := v_counter + 1; + if (v_counter < 2) { + repeat; + } else { + setverdict(pass, "Both replies received"); // expected result + } + } else { + setverdict(fail, "Wrong component"); + } + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_013(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn new file mode 100644 index 000000000..72f652c42 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, non-blocking broadcast call + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case of a multicast or broadcast call operation of a non-blocking procedure, all exceptions which +// may be raised from the different communication partners can be handled in subsequent catch, alt or +// interleave statements. + +module Sem_220301_CallOperation_015 { + + signature S() noblock exception (integer); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.raise(S, 1); + } + + testcase TC_Sem_220301_CallOperation_015() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create; + + var integer v_counter := 0; + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + + p.call(S:{}) to all component; + alt { + [] p.catch { + v_counter := v_counter + 1; + if (v_counter < 2) { + repeat; + } else { + setverdict(pass, "Both exception received"); // both exception received + } + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_015(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn new file mode 100644 index 000000000..5a3dc0a43 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, non-blocking broadcast call + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case of a multicast or broadcast call operation of a non-blocking procedure, all exceptions which +// may be raised from the different communication partners can be handled in subsequent catch, alt or +// interleave statements. + +module Sem_220301_CallOperation_016 { + + signature S() noblock exception (integer); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.raise(S, 1); + } + + testcase TC_Sem_220301_CallOperation_016() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create, + v_ptc3 := GeneralComp.create, + v_comp; + + var integer v_counter := 0; + connect(self:p, v_ptc1:p); + connect(self:p, v_ptc2:p); + connect(self:p, v_ptc3:p); + v_ptc1.start(f_called()); + v_ptc2.start(f_called()); + v_ptc3.start(f_called()); + + p.call(S:{}) to (v_ptc1, v_ptc3); + alt { + [] p.catch { + v_counter := v_counter + 1; + if (v_counter < 2) { + repeat; + } else { + setverdict(pass, "Both exception received"); // both exception received + } + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_016(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn new file mode 100644 index 000000000..bd4718eda --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, non-blocking unicast call + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case of non-blocking procedure-based communication the handling of exceptions to call operations +// is done by using catch (see clause 22.3.6) operations as alternatives in alt statements. + +module Sem_220301_CallOperation_017 { + + signature S() noblock exception (integer); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S:{}); + p.raise(S, 1); + } + + testcase TC_Sem_220301_CallOperation_017() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S:{}); + alt { + [] p.catch { + setverdict(pass, "Exception received"); // success: exception received + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_017(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn new file mode 100644 index 000000000..4c9b264b6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that out parameters of a signature used in a call operation can be omitted + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// c) Only out parameters may be omitted or specified with a matching attribute. + +module Sem_220301_CallOperation_018 { + + signature S(out integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := - }; + + testcase TC_Sem_220301_CallOperation_018() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1, nowait); + setverdict(pass); + } + + control{ + execute(TC_Sem_220301_CallOperation_018(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn new file mode 100644 index 000000000..796241ef9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that out parameters of a signature used in a call operation can contain matching symbols + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// c) Only out parameters may be omitted or specified with a matching attribute. + +module Sem_220301_CallOperation_019 { + + signature S(out integer p_par); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := ? }; + + testcase TC_Sem_220301_CallOperation_019() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + p.call(s_signature1, nowait); + setverdict(pass); + } + + control{ + execute(TC_Sem_220301_CallOperation_019(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn new file mode 100644 index 000000000..271a36000 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that replies that are not related to the actual call are ignored in unqualified getreply statements + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// h) The selection of the alternatives to a call shall only be based on getreply and catch operations +// for the called procedure. Unqualified getreply and catch operations shall only treat replies from +// and exceptions raised by the called procedure. + +module Sem_220301_CallOperation_020 { + + signature S1(); + signature S2(); + + type port P procedure { + inout S1, S2; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S1:{}); + p.getcall(S2:{}); + p.reply(S1:{}); + } + + testcase TC_Sem_220301_CallOperation_020() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S1:{}, 1.0) { + [] p.catch(timeout) {}; + }; // non-blocking call (but the script "forgets" to handle the reply - this should clog the port + p.call(S2:{}, 1.0) { + [] p.getreply { setverdict(fail, "The reply is not the expected one!"); } // this one should receive only S2 replies, but there's S1 in the port queue + [] p.catch(timeout) { setverdict(pass, "Timeout as expected"); } + } + } + + control { + execute(TC_Sem_220301_CallOperation_020(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_021.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_021.ttcn new file mode 100644 index 000000000..b9b1d7dee --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_021.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.1, verify that exceptions that are not related to the actual call are ignored in unqualified catch statements + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// h) The selection of the alternatives to a call shall only be based on getreply and catch operations +// for the called procedure. Unqualified getreply and catch operations shall only treat replies from +// and exceptions raised by the called procedure. + +module Sem_220301_CallOperation_021 { + + signature S1() noblock exception(integer); + signature S2() exception(charstring); + + type port P procedure { + inout S1, S2; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S1:{}); + p.getcall(S2:{}); + p.raise(S1, 1); + p.raise(S2, "exc"); + } + + testcase TC_Sem_220301_CallOperation_021() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f_called()); + p.call(S1:{}); // non-blocking call (but the script "forgets" to handle the exception - this should clog the port + p.call(S2:{}, 1.0) { + [] p.catch { setverdict(fail, "The exception is not the expected one!"); } // this one should receive only S2 exceptions, but there's S1 in the port queue + [] p.catch(timeout) { setverdict(pass, "Timeout as expected"); } + } + } + + control { + execute(TC_Sem_220301_CallOperation_021(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_009.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_009.ttcn index 605fd6e8c..8a704d8b8 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_009.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_009.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220302_GetcallOperation_009 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_010.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_010.ttcn index baa404aeb..ba580fa5d 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_010.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_010.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220302_GetcallOperation_010 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn index da30aed40..a91b16802 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn @@ -16,7 +16,7 @@ * ** @version 0.0.1 ** @purpose 1:22.3.2, incompatible decmatch and @decoded value redirect - ** @verdict pass accept, ttcn3verdict:pass + ** @verdict pass reject *****************************************************************/ // The following requirements are tested: diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_018.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_018.ttcn new file mode 100644 index 000000000..8c21f6cb9 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_018.ttcn @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.2, incompatible template in the from clause of the getcall operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) All AddressRef items in the from clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type (see +// section 6.2.9) of the port instance referenced in the getcall operation. + +module NegSem_220302_GetcallOperation_018 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + testcase TC_NegSem_220302_GetcallOperation_018() runs on GeneralComp system GeneralComp { + var charstring v_addr := "addr"; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + alt { + [] p.getcall(S:{}) from v_addr {} // error expected + [] p.getcall {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_018(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_019.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_019.ttcn new file mode 100644 index 000000000..ae78caf0e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_019.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.2, trying to store an incompatible component value in the sender clause of a getcall operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// l) If the operation contains a sender clause but no from clause, the sender shall be type +// compatible with the type of the variable or parameter referenced in the sender clause. + +module NegSem_220302_GetcallOperation_019 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + var integer vc_int; + port P p; + } + + type component AltComp { + var charstring vc_str; + port P px; + } + + function f() runs on GeneralComp { + var AltComp v_compRef := null; + alt { + [] p.getcall(S:{}) -> sender v_compRef { } // error expected + [] p.getcall(S:{}) { } + } + setverdict (pass); + } + + testcase TC_NegSem_220302_GetcallOperation_019() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_GetcallOperation_019(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_020.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_020.ttcn new file mode 100644 index 000000000..d8d161b9b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_020.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.2, getcall with a from clause (single item) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A getcall operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220302_GetcallOperation_020 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220302_GetcallOperation_020() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_receiveCounter := 0; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.getcall(S:{}) from v_ptcs[0] { setverdict(pass); } // expected 1 from match + [] p.getcall(S:{}) { v_receiveCounter := v_receiveCounter + 1; } // expected 2 other received exceptions + } + } + if (v_receiveCounter != c_ptcCount - 1) { setverdict(fail); } + } + + control { + execute(TC_Sem_220302_GetcallOperation_020(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_021.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_021.ttcn new file mode 100644 index 000000000..09bba1909 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_021.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.2, getcall with a from clause (multiple items) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A getcall operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220302_GetcallOperation_021 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220302_GetcallOperation_021() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_fromCounter := 0, v_noFromCounter := 0; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.getcall(S:{}) from (v_ptcs[0], v_ptcs[1]) { v_fromCounter := v_fromCounter + 1; } + [] p.getcall(S:{}) { v_noFromCounter := v_noFromCounter + 1; } + } + } + if (v_fromCounter == 2 and v_noFromCounter == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220302_GetcallOperation_021(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_022.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_022.ttcn new file mode 100644 index 000000000..187931441 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_022.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.2, getcall with a from clause (any component) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A getcall operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220302_GetcallOperation_022 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220302_GetcallOperation_022() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.getcall(S:{}) from any component { setverdict(pass); } + [] p.getcall(S:{}) { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220302_GetcallOperation_022(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn index 2441df49f..cd47470d4 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn @@ -20,7 +20,8 @@ ***************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220303_ReplyOperation_002 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn index 6f2b22100..06db03f04 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn @@ -20,7 +20,8 @@ ***************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220303_ReplyOperation_003 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn new file mode 100644 index 000000000..5f91e069e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn @@ -0,0 +1,46 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that reply operation cannot be used on a message port + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// a) A reply operation shall only be used at a procedure-based port. + +module NegSem_220303_ReplyOperation_004 { + + signature S() return integer; + + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220303_ReplyOperation_004() runs on GeneralComp { + p.reply(S:{} value 1); + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_004(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn new file mode 100644 index 000000000..565448b61 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that signature not listed in the port definition cannot be used in the reply operation + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// The type definition of the port shall include the name of the procedure +// to which the reply operation belongs. + +module NegSem_220303_ReplyOperation_005 { + + signature S(); + signature SNotListed(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + p.getcall; + p.reply(SNotListed:{}); + } + + testcase TC_NegSem_220303_ReplyOperation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_005(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn new file mode 100644 index 000000000..b9d157e31 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that matching symbols cannot be used in out signature parameters in reply operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// b) All out and inout parameters of the signature shall have a specific value i.e. +// the use of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220303_ReplyOperation_006 { + + type record R { + integer field1, + integer field2 + } + + signature S(out R par1); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var template R v_rec := { field1 := 0, field2 := ? }; + p.getcall(S:{-}); + p.reply(S:{par1 := v_rec}); + } + + testcase TC_NegSem_220303_ReplyOperation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{-}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_006(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn new file mode 100644 index 000000000..657568673 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that matching symbols cannot be used in inout signature parameters in reply operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// b) All out and inout parameters of the signature shall have a specific value i.e. +// the use of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220303_ReplyOperation_007 { + + type record R { + integer field1, + integer field2 + } + + signature S(inout R par1); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var template R v_rec := { field1 := 0, field2 := ? } + p.getcall(S:{par1 := {field1 := 0, field2 := 5}}); + p.reply(S:{par1 := v_rec}); + } + + testcase TC_NegSem_220303_ReplyOperation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{par1 := {field1 := 0, field2 := 5} }, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_007(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn new file mode 100644 index 000000000..d1df3de00 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn @@ -0,0 +1,92 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that error is issued for a missing to clause in a reply operation in case of one-to-many connections + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// c) A to clause shall be present in case of one-to-many connections. + +module NegSem_220303_ReplyOperation_008 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_ClientQuery() runs on GeneralComp { + + p.call(S:{}, 1.0) { + + [] p.getreply(S:{}) { + } + [] p.catch (timeout) { + } + } + setverdict(pass); + } + + function f_ServerResponses() runs on GeneralComp { + var GeneralComp v_client1 := null, v_client2 := null; + + alt { + [v_client1 == null] p.getcall(S:{}) -> sender v_client1 { + if (v_client2 == null) { repeat; } + } + [v_client2 == null] p.getcall(S:{}) -> sender v_client2 { + if (v_client1 == null) { repeat; } + } + } + p.reply(S:{}); // to clause missing, but there are 2 clients! + setverdict(pass); + } + + testcase TC_NegSem_220303_ReplyOperation_008() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + var GeneralComp client2 := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:p, client:p); + connect(server:p, client2:p); + + server.start(f_ServerResponses()); + + client2.start(f_ClientQuery()); + client.start(f_ClientQuery()); + + interleave { + [] client.done {} + [] client2.done {} + } + server.stop; + + alt { + [] all component.done {} + } + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_008()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn new file mode 100644 index 000000000..bdf9b575a --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that values that are not addresses or components cannot be used in the to clause of the reply operation + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// d) All AddressRef items in the to clause shall be of type address, component or of the address +// type bound to the port type (see clause 6.2.9) of the port instance referenced in the reply +// operation. + +module NegSem_220303_ReplyOperation_009 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_addr := 10; + p.getcall(S:{}); + p.reply(S:{}) to v_addr; + } + + testcase TC_NegSem_220303_ReplyOperation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_009(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn new file mode 100644 index 000000000..1392d5d58 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that reply operation on a disconnected port causes an error + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// f) Applying a reply operation to an unmapped or disconnected port shall cause a test +// case error. + +module NegSem_220303_ReplyOperation_010 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + p.getcall(S:{}); + disconnect(self:p, mtc:p); + p.reply(S:{}); + } + + testcase TC_NegSem_220303_ReplyOperation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_010(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn new file mode 100644 index 000000000..b5ebe1652 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that functionality of a simple reply operation (implicit unicast, no return value) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The value part of the reply operation consists of a signature reference with an associated +// actual parameter list and (optional) return value. The signature may either be defined in +// the form of a signature template or it may be defined in-line. + +// In case of one-to-one connections, the to clause may be omitted, because the receiving entity +// is uniquely identified by the system structure. + +module Sem_220303_ReplyOperation_003 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_Sem_220303_ReplyOperation_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_Sem_220303_ReplyOperation_003(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn new file mode 100644 index 000000000..c6c40a51f --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that functionality of a simple reply operation (explicit unicast, return value) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The value part of the reply operation consists of a signature reference with an associated +// actual parameter list and (optional) return value. The signature may either be defined in +// the form of a signature template or it may be defined in-line. + +// Responses to one or more call operations may be sent to one, several or all peer entities +// connected to the addressed port. This can be specified in the same manner as described in +// clause 22.2.1. This means, the argument of the to clause of a reply operation is for unicast +// responses the address of one receiving entity, for multicast responses a list of addresses +// of a set of receivers and for broadcast responses the all component keywords. + +module Sem_220303_ReplyOperation_004 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var GeneralComp v_sender; + p.getcall(S:{}) -> sender v_sender; + p.reply(S:{} value 2) to v_sender; + } + + testcase TC_Sem_220303_ReplyOperation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_Sem_220303_ReplyOperation_004(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn new file mode 100644 index 000000000..f54634e09 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.3, verify that in signature parameters of reply operations can contain matching symbols + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// b) All out and inout parameters of the signature shall have a specific value i.e. +// the use of matching mechanisms such as AnyValue is not allowed. + +module Sem_220303_ReplyOperation_005 { + + type record R { + integer field1, + integer field2 + } + + signature S(in R par1); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var template R v_rec := { field1 := 0, field2 := ? } + p.getcall(S:{ par1 := { field1 := 0, field2 := 10 } }); + p.reply(S:{par1 := v_rec}); + } + + testcase TC_Sem_220303_ReplyOperation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ par1 := { field1 := 0, field2 := 10 } }, nowait); + alt { + [] p.getreply {} + [] v_ptc.done {} + } + setverdict(pass); + } + + control{ + execute(TC_Sem_220303_ReplyOperation_005(), 5.0); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn index c2dc021a2..c5343ef5a 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220304_getreply_operation_006 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn index 647a213b1..3aaa8cd60 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220304_getreply_operation_007 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn new file mode 100644 index 000000000..167f83a08 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.4, incompatible template in the from clause of the getreply operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) All AddressRef items in the from clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type (see +// section 6.2.9) of the port instance referenced in the getcall operation. + +module NegSem_220304_getreply_operation_021 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{} value 1); + } + + testcase TC_NegSem_220304_getreply_operation_021() runs on GeneralComp system GeneralComp { + var charstring v_addr := "addr"; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}) { + [] p.getreply(S:{}) from v_addr {} // error expected + [] p.getreply {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_021(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn new file mode 100644 index 000000000..621fe8440 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.4, trying to store an incompatible component value in the sender clause of a getreply operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// j) If the operation contains a sender clause but no from clause, the sender shall be type +// compatible with the type of the variable or parameter referenced in the sender clause. + +module NegSem_220304_getreply_operation_022 { + + signature S(); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + var integer vc_int; + port P p; + } + + type component AltComp { + var charstring vc_str; + port P px; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220304_getreply_operation_022() runs on GeneralComp system GeneralComp { + var AltComp v_compRef := null; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}) { + [] p.getreply(S:{}) -> sender v_compRef { } // error expected + [] p.getreply(S:{}) { } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_022(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn new file mode 100644 index 000000000..7837a811d --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.4, getreply with a from clause (single item) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A getreply operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220304_getreply_operation_021 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{} value 1); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220304_getreply_operation_021() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_receiveCounter := 0; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + p.call(S:{}, nowait) to v_ptcs[i]; + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.getreply(S:{}) from v_ptcs[0] { setverdict(pass); } // expected 1 from match + [] p.getreply(S:{}) + { v_receiveCounter := v_receiveCounter + 1; } // expected 2 other received exceptions + } + } + if (v_receiveCounter != c_ptcCount - 1) { setverdict(fail); } + } + + control { + execute(TC_Sem_220304_getreply_operation_021(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn new file mode 100644 index 000000000..cee1566e8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn @@ -0,0 +1,70 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.4, getreply with a from clause (multiple items) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A getreply operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220304_getreply_operation_022 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{} value 1); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220304_getreply_operation_022() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_fromCounter := 0, v_noFromCounter := 0; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + p.call(S:{}, nowait) to v_ptcs[i]; + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.getreply(S:{}) from (v_ptcs[0], v_ptcs[1]) { v_fromCounter := v_fromCounter + 1; } + [] p.getreply(S:{}) { v_noFromCounter := v_noFromCounter + 1; } + } + } + if (v_fromCounter == 2 and v_noFromCounter == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220304_getreply_operation_022(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn new file mode 100644 index 000000000..ac813b626 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.4, getreply with a from clause (any component) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A getreply operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220304_getreply_operation_023 { + + signature S() return integer; + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.reply(S:{} value 1); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220304_getreply_operation_023() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + p.call(S:{}, nowait) to v_ptcs[i]; + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.getreply(S:{}) from any component { setverdict(pass); } + [] p.getreply(S:{}) { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_023(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn index ed8a3dc95..2416aa744 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn @@ -21,10 +21,10 @@ // The following requirements are tested: // Exceptions are specified as types. Therefore the exception value may either be derived -// from a template or be the value resulting from an expression (which of course can be -// an explicit value). The optional type field in the value specification to the raise -// operation shall be used in cases where it is necessary to avoid any ambiguity of the type -// of the value being sent. +// from a template conforming to the template(value) restriction or be the value resulting +// from an expression (which of course can be an explicit value). The optional type field in +// the value specification to the raise operation shall be used in cases where it is necessary +// to avoid any ambiguity of the type of the value being sent. module NegSem_220305_raise_operation_001 { signature S() exception(charstring, octetstring); diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn index a1f4f88ea..a7e6a1149 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn @@ -21,10 +21,10 @@ // The following requirements are tested: // Exceptions are specified as types. Therefore the exception value may either be derived -// from a template or be the value resulting from an expression (which of course can be -// an explicit value). The optional type field in the value specification to the raise -// operation shall be used in cases where it is necessary to avoid any ambiguity of the type -// of the value being sent. +// from a template conforming to the template(value) restriction or be the value resulting +// from an expression (which of course can be an explicit value). The optional type field in +// the value specification to the raise operation shall be used in cases where it is necessary +// to avoid any ambiguity of the type of the value being sent. module NegSem_220305_raise_operation_002 { signature S(); diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn index 77112720a..4bac31cc3 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn @@ -21,10 +21,10 @@ // The following requirements are tested: // Exceptions are specified as types. Therefore the exception value may either be derived -// from a template or be the value resulting from an expression (which of course can be -// an explicit value). The optional type field in the value specification to the raise -// operation shall be used in cases where it is necessary to avoid any ambiguity of the type -// of the value being sent. +// from a template conforming to the template(value) restriction or be the value resulting +// from an expression (which of course can be an explicit value). The optional type field in +// the value specification to the raise operation shall be used in cases where it is necessary +// to avoid any ambiguity of the type of the value being sent. module NegSem_220305_raise_operation_003 { type integer MyInt1 (1..10); diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn index e43a887fb..bff9a7fb6 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn @@ -18,9 +18,11 @@ ** @purpose 1:22.3.5, value of incorrect type in the to clause of the raise operation ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// AddressRef shall be of type address, component or of the type provided in the address -// declaration of the port type of the port instance referenced in the raise operation. +// All AddressRef items in the to clause shall be of type address, component or of the +// address type bound to the port type (see clause 6.2.9) of the port instance referenced +// in the raise operation. module NegSem_220305_raise_operation_007 { signature S() exception(integer); diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn index a0c9f1cf1..38e6fdfd7 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn @@ -18,8 +18,10 @@ ** @purpose 1:22.3.5, null in the to clause of the raise operation ** @verdict pass reject *****************************************************************/ + // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220305_raise_operation_008 { signature S() exception(integer); diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn new file mode 100644 index 000000000..84a786262 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.5, exception template not conforming to template(value) restriction + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) The TemplateInstance shall conform to the template(value) restriction (see clause 15.8). + +module NegSem_220305_raise_operation_010 { + signature S() exception(charstring, octetstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.raise(S, charstring:?); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}, nowait); // no processing of the exception to avoid possible errors in the catch operation + v_ptc.done; + } + + control { + execute(TC_NegSem_220305_raise_operation_010(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn index 187d47e20..c7aa34491 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220306_catch_operation_006 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn index 9533034a2..e879c4d6a 100644 --- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn @@ -20,7 +20,8 @@ *****************************************************************/ // The following requirements are tested: -// No AddressRef shall contain the special value null at the time of the operation. +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. module NegSem_220306_catch_operation_007 { diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn new file mode 100644 index 000000000..6a5f44b65 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.6, incompatible template in the from clause of the catch operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// f) All AddressRef items in the from clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type (see +// clause 6.2.9) of the port instance referenced in the catch operation. + +module NegSem_220306_catch_operation_015 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + testcase TC_NegSem_220306_catch_operation_015() runs on GeneralComp system GeneralComp { + var charstring v_addr := "addr"; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}) { + [] p.catch(S, charstring:?) from v_addr {} // error expected + [] p.catch {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220306_catch_operation_015(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn new file mode 100644 index 000000000..23811b971 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.6, trying to store an incompatible component value in the sender clause of a catch operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// l) If the operation contains a sender clause but no from clause, the sender shall be type +// compatible with the type of the variable or parameter referenced in the sender clause. + +module NegSem_220306_catch_operation_016 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp { + var integer vc_int; + port P p; + } + + type component AltComp { + var charstring vc_str; + port P px; + } + + function f() runs on GeneralComp { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + testcase TC_NegSem_220306_catch_operation_016() runs on GeneralComp system GeneralComp { + var AltComp v_compRef := null; + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S:{}) { + [] p.catch(S, charstring:?) -> sender v_compRef { } // error expected + [] p.catch { } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220306_catch_operation_016(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn new file mode 100644 index 000000000..889a86c2e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.6, catch with a from clause (single item) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A catch operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220306_catch_operation_015 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220306_catch_operation_015() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_receiveCounter := 0; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + p.call(S:{}, nowait) to v_ptcs[i]; + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.catch(S, charstring:?) from v_ptcs[0] { setverdict(pass); } // expected 1 from match + [] p.catch(S, charstring:?) + { v_receiveCounter := v_receiveCounter + 1; } // expected 2 other received exceptions + } + } + if (v_receiveCounter != c_ptcCount - 1) { setverdict(fail); } + } + + control { + execute(TC_Sem_220306_catch_operation_015(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn new file mode 100644 index 000000000..e5467ff81 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.6, catch with a from clause (multiple items) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A catch operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220306_catch_operation_016 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220306_catch_operation_016() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_fromCounter := 0, v_noFromCounter := 0; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + p.call(S:{}, nowait) to v_ptcs[i]; + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.catch(S, charstring:?) from (v_ptcs[0], v_ptcs[1]) { v_fromCounter := v_fromCounter + 1; } + [] p.catch(S, charstring:?) { v_noFromCounter := v_noFromCounter + 1; } + } + } + if (v_fromCounter == 2 and v_noFromCounter == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220306_catch_operation_016(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn new file mode 100644 index 000000000..01f20b4d2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn @@ -0,0 +1,69 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.3.6, catch with a from clause (any component) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A catch operation may be restricted to a certain communication partner in case +// of one-to-many connections. This restriction shall be denoted by using the from +// keyword followed by a specification of an address or component reference, a list +// of address or component references or any component. + +module Sem_220306_catch_operation_017 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } with {extension "internal"} + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220306_catch_operation_017() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + v_ptcs[i].start(f()); + p.call(S:{}, nowait) to v_ptcs[i]; + } + + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + alt { + [] p.catch(S, charstring:?) from any component { setverdict(pass); } + [] p.catch(S, charstring:?) { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220306_catch_operation_017(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn new file mode 100644 index 000000000..c263d8ccb --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.4, incompatible value in the from clause + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// All AddressRef items in the from clause and all VariableRef items in the sender clause +// shall be of type address, component or of the address type bound to the port type +// (see clause 6.2.9) of the port instance referenced in the check operation. + +module NegSem_2204_the_check_operation_004 { + + type integer address; + + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_2204_the_check_operation_004() runs on GeneralComp { + var address v_addr := 2; + var charstring v_addr2 := ""; + p.send(100) to v_addr; + alt { + [] p.check(from (v_addr, v_addr2)) { } + [] p.check {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2204_the_check_operation_004(), 5.0); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn new file mode 100644 index 000000000..c7aed5c1e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:22.4, verify that a runtime error is generated if the real sender is incompatible with the variable in sender redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the operation contains a sender clause but no from clause, the sender shall be type +// compatible with the variable or parameter referenced in the sender clause. + +module NegSem_2204_the_check_operation_005 { + + type integer address; + + type port P message { + inout integer; + } with {extension "internal"} + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_2204_the_check_operation_005() runs on GeneralComp { + var address v_addr := 2; + var GeneralComp v_ptc; + p.send(100) to v_addr; + alt { + [] p.check(-> sender v_ptc) { } + [] p.check {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2204_the_check_operation_005()/*, 5.0*/); + } +} diff --git a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn index 7bbd35d0f..e24f33bd0 100644 --- a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn +++ b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn @@ -16,7 +16,7 @@ * ** @version 0.0.1 ** @purpose 1:23, Ensure timer runs from zero to stated value - ** @verdict pass accept, ttnc3verdict:pass + ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // #reqname /Requirements/23 Timer operations/23.2 The start timer operation/timer clock runs from 0 to the value set diff --git a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn index c4b855473..c7799968c 100644 --- a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn @@ -16,7 +16,7 @@ * ** @version 0.0.1 ** @purpose 1:23, Ensure timer can be restarted - ** @verdict pass accept, ttnc3verdict:pass + ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // #reqname /Requirements/23 Timer operations/23.2 The start timer operation/timer can be restarted by repeated start operation diff --git a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn index 8551764f2..fe8d76ea3 100644 --- a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn @@ -16,7 +16,7 @@ * ** @version 0.0.1 ** @purpose 1:23, Ensure timer default value can be modified by start value - ** @verdict pass accept, ttnc3verdict:pass + ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // #reqname /Requirements/23 Timer operations/23.2 The start timer operation/timer clock runs from 0 to the value set // #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Overridden timer value applies only to current instance diff --git a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn index 3ce5ec331..740cd48cb 100644 --- a/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn +++ b/conformance_test/core_language_tests/positive_tests/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn @@ -16,7 +16,7 @@ * ** @version 0.0.1 ** @purpose 1:23, Ensure timer with value 0.0 expires immediately - ** @verdict pass accept, ttnc3verdict:pass + ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ // #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Timer with the timer value 0.0 times out immediately. diff --git a/conformance_test/core_language_tests/positive_tests/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn b/conformance_test/core_language_tests/positive_tests/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn new file mode 100644 index 000000000..f91b601de --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:26.1, verify that test cases can be executed from altsteps called from the control block + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// c) The execute statement shall not be called from within an existing executing test behaviour +// chain called from a test case, i.e. test cases can only be executed from the control part or +// from functions or altsteps called directly or indirectly from the control part. + +module Sem_2601_ExecuteStatement_010 { + + type component GeneralComp { } + + testcase TC_Sem_2601_ExecuteStatement_010() runs on GeneralComp { + setverdict(pass); + } + + altstep a() { + [] any timer.timeout { + execute(TC_Sem_2601_ExecuteStatement_010()); + } + } + + control { + var verdicttype v_result; + timer t_tmr1 := 0.5, t_tmr2 := 2.0; + t_tmr1.start; + t_tmr2.start; + activate(a()); + alt { // t_tmr1 shall time out first triggering the default and thus executing the test case + [] t_tmr2.timeout { + } + } + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn b/conformance_test/core_language_tests/positive_tests/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn new file mode 100644 index 000000000..0502b88ad --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn @@ -0,0 +1,109 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass reject + ***************************************************/ + +module NegSem_2707_OptionalAttributes_001 { + + type enumerated EnumeratedType {e_black, e_white}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type set SetType { + integer a optional, + integer b optional, + boolean c + } + + type record length (1..2) of integer IntegerList; + + type set length (1..2) of integer IntegerUList; + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + boolean field3, + integer field4[4], + EnumeratedType field5, + RecordType field6, + SetType field7, + UnionType field8, + IntegerList field9, + IntegerUList field10 + } + + type port loopbackPort message { + inout MessageType + } with { optional "implicit omit"} + // the optional keyword is forbidden here, because according to the restriction 27.7.a + // a port type shall not have an optional attribute associated to them directly. + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_2707_OptionalAttributes_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + v_testMessage:= { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=omit,b:=omit,c:=true}, + field7 := {a:=omit,b:=omit,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + } + + control{ + execute(TC_NegSem_2707_OptionalAttributes_001()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn new file mode 100644 index 000000000..530b8ddb5 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn @@ -0,0 +1,63 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +//The type of the template list and the member type of the template in the all from clause shall be compatible. +// Restriction B + +module NegSem_B010201_value_list_001 { + + type set of integer SoI; + + template SoI m_SoI := {1,2,3,4}; + template float mw_SoI := (all from m_SoI); //error: m_SoI is integer, mw_SoI is float + + type port loopbackPort message { + inout float + } with {extension "internal"} + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_001() runs on GeneralComp { + + var float v_testMessage := 2.0; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_001()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn new file mode 100644 index 000000000..d1fe8eaff --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction D,E: Individual members of the template in the all from clause shall not resolve to any of the following matching mechanisms: AnyElementsOrNone, permutation. + +module NegSem_B010201_value_list_002 { + + type set of integer SoI; + + template SoI m_SoI := {1,*,4}; + template integer mw_SoI := (all from m_SoI); //error: m_SoI contains AnyElementsOrNone + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_002() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_002()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn new file mode 100644 index 000000000..0d96317c8 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction D,E: Individual members of the template in the all from clause shall not resolve to any of the following matching mechanisms: AnyElementsOrNone, permutation. + +module NegSem_B010201_value_list_003 { + + type record of integer RoI; + + template RoI m_RoI := {permutation(0,1,3,*),2}; + template integer mw_RoI := (all from m_RoI); //error: m_RoI contains permutation + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_003() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_RoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_003()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn new file mode 100644 index 000000000..b25466f74 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template list corretly + ** @verdict pass accept reject + ***************************************************/ + +// The following requirements are tested: +// e) Templates in the template list shall obey the template (present) restriction + +module NegSem_B010201_value_list_004 { + + type record MessageType { + integer field1, + charstring field2 + } + + template integer t_omit := omit; + + template MessageType t_mes := { + field1 := (1, 2, t_omit), // present restriction does not allow omit + field2 := ("abc", "bc") + } + + type port loopbackPort message { + inout MessageType + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010201_value_list_004() runs on GeneralComp { + + var MessageType v_testMessage := { + field1:= 1, + field2:= "abc" + } + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(t_mes) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_B010201_value_list_004()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn new file mode 100644 index 000000000..6c25b113e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +//A template list may contain values, templates obeying the template(present) restriction, and members added by all from clauses. + +module Sem_B010201_value_list_002 { + + type record of integer RoI; + + template RoI m_RoI := {1,2,3,4}; + template integer mw_RoI := (all from m_RoI); + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_Sem_B010201_value_list_002() runs on GeneralComp { + + var integer v_testMessage := 2; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_RoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_B010201_value_list_002()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn new file mode 100644 index 000000000..f3d4585ca --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn @@ -0,0 +1,61 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching with all from clause + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +//A template list may contain values, templates obeying the template(present) restriction, and members added by all from clauses. + +module Sem_B010201_value_list_003 { + + type set of integer SoI; + + template SoI m_SoI := {1,2,3,4}; + template integer mw_SoI := (all from m_SoI); + + type port loopbackPort message { + inout integer + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_Sem_B010201_value_list_003() runs on GeneralComp { + + var integer v_testMessage := 2; + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_B010201_value_list_003()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn new file mode 100644 index 000000000..659abaf1b --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn @@ -0,0 +1,71 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template list corretly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Restriction C: Templates in the template list shall obey the template(present) restriction + +module Sem_B010201_value_list_004 { + + type record MessageType { + integer field1, + charstring field2 optional + } + + template integer t_present := ?; + + template MessageType t_mes := { + field1 := (1, 2, t_present), // present restriction allows AnyValue + field2 := ("abc", "bc") + } + + type port loopbackPort message { + inout MessageType + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_Sem_B010201_value_list_004() runs on GeneralComp { + + var MessageType v_testMessage := { + field1:= 1, + field2:= "abc" + } + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(t_mes) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_B010201_value_list_004()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn index 52262d7f2..dcbb787db 100644 --- a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn @@ -16,7 +16,7 @@ * ** @version 0.0.1 ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing - ** @verdict pass reject + ** @verdict pass accept, ttcn3verdict:pass ***************************************************/ module Sem_B010202_complemented_value_list_007 { diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_004.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_004.ttcn new file mode 100644 index 000000000..0ddb19df6 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_004.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that AnyValueOrNone cannot be used for matching non-optional value + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// At the time of matching, it shall be applied to optional fields of record and set +// templates only. + +module Sem_B010204_any_value_or_none_004 { + + type set Set1 { + integer field1, + integer field2 optional + } + + template Set1 t_anyOrNone := *; // top-level static template + + type component GeneralComp { + } + + testcase TC_Sem_B010204_any_value_or_none_004() runs on GeneralComp { + var Set1 v_val := { field1 := 5, field2 := 23 }; + if (match(v_val, t_anyOrNone)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_B010204_any_value_or_none_004()); + } + +} + diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_005.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_005.ttcn new file mode 100644 index 000000000..1b1c66e5e --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_005.ttcn @@ -0,0 +1,52 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that AnyValueOrNone cannot be used for matching compulsory fields + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// At the time of matching, it shall be applied to optional fields of record and set +// templates only. + +module Sem_B010204_any_value_or_none_005 { + + type set Set1 { + integer field1, + integer field2 optional + } + + template integer t_anyOrNone := *; // top-level static template + + type component GeneralComp { + } + + testcase TC_Sem_B010204_any_value_or_none_005() runs on GeneralComp { + var Set1 v_val := { field1 := 5, field2 := 23 }; + if (match(v_val.field1, t_anyOrNone)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_B010204_any_value_or_none_005()); + } + +} + diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_003.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_003.ttcn index b1fb5b26c..3809fa471 100644 --- a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_003.ttcn +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_003.ttcn @@ -22,37 +22,36 @@ module NegSem_B010208_omit_value_003 { type record MessageType { - integer field1, - MyRecordof field2 optional, - boolean field3 optional + integer field1, + MyRecordof field2 optional, + boolean field3 optional } type record of integer MyRecordof; type port loopbackPort message { - inout MessageType + inout MessageType } with {extension "internal"} - type component GeneralComp { + type component GeneralComp { port loopbackPort messagePort } testcase TC_NegSem_B010208_omit_value_003() runs on GeneralComp { - var MessageType v_testMessage; var boolean v_boolean; template MyRecordof mw_MyRecofTemplate := omit; // this assignment is allowed template boolean mw_MyBoolTemplate := omit; // this assignment is allowed template MessageType mw_matchingTemplate:= - { + { field1 := ?, field2 := mw_MyRecofTemplate, field3 := mw_MyBoolTemplate } - v_testMessage:= { + var MessageType v_testMessage:= { field1 := 2, field2 := omit, field3 := omit @@ -64,7 +63,7 @@ module NegSem_B010208_omit_value_003 { alt { [] messagePort.receive(mw_matchingTemplate) { v_boolean := match({},mw_MyRecofTemplate); - // causes an error as a record of template shall not be “omit†at the time of matching + // causes an error as a record of template shall not be omit at the time of matching setverdict(pass); } [] messagePort.receive { diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn new file mode 100644 index 000000000..23af12b51 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.2.10, Ensure that the IUT correctly handles enum matching + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +/*The template matches only those enumerated values of the same name where the associated integer values is matched by at least one of the integer templates.*/ + + +module Sem_B010210_enumerated_value_list_001 { + + type enumerated MyFirstEnum { + First_enum(0), Second_enum(1), other_enum(2..200) + } + + type port messagePortType message { + inout MyFirstEnum; + } with {extension "internal"} + + template integer m_Int := (10..100); + + + type component GeneralComp { + port messagePortType messagePort; + } + + + testcase TC_Sem_B010210_enumerated_value_list_001() runs on GeneralComp { + + template MyFirstEnum mw_matchingTemplate:= other_enum(m_Int); // matches other_enum(10..100) + + var MyFirstEnum v_message := other_enum(11); + + connect(self:messagePort, self:messagePort); + messagePort.send(v_message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail, mw_matchingTemplate); + } + } + } + + control{ + execute(TC_Sem_B010210_enumerated_value_list_001()); + } + +} diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_001.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_001.ttcn index 30e136f54..56f49651b 100644 --- a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_001.ttcn +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_001.ttcn @@ -45,16 +45,16 @@ module NegSem_B010401_length_restrictions_001 { var MessageType v_testMessage; template MessageType mw_matchingTemplate:= { - field1 := pattern "test mess*ge" length (6 .. 8),//pattern is longer than length restriction + field1 := pattern "test s*g" length (6 .. 15), field2 := '10*'B length (3 .. 5), - field3 := '89*ABC'H length (5), + field3 := '89?AB'H length (6), //pattern is shorter than length restriction field4 := pattern "tes?" length (4 .. 13), field5 := '10?'B length (3 .. 5), field6 := '89?ABC'H length (6) } v_testMessage:= { - field1 := "test message", + field1 := "test string", field2 := '10101'B, field3 := '89ABC'H, field4 := "test", @@ -62,19 +62,19 @@ module NegSem_B010401_length_restrictions_001 { field6 := '899ABC'H } - connect(self:messagePort, self:messagePort); - messagePort.send(v_testMessage); + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); alt { [] messagePort.receive(mw_matchingTemplate) { setverdict(fail); } [] messagePort.receive { - setverdict(pass); + setverdict(pass); } } } - + control{ execute(TC_NegSem_B010401_length_restrictions_001()); } diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_002.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_002.ttcn index ee42d3cc9..897911ae6 100644 --- a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_002.ttcn +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_002.ttcn @@ -23,19 +23,18 @@ module NegSem_B010401_length_restrictions_002 { type record MessageType { - charstring field1, - bitstring field2, - hexstring field3, - charstring field4, - bitstring field5, - hexstring field6 + record of integer field1, + record of integer field2, + record of integer field3, + record of integer field4, + record of integer field5, + record of integer field6 } type port loopbackPort message { inout MessageType } with {extension "internal"} - type component GeneralComp { port loopbackPort messagePort } @@ -45,25 +44,21 @@ module NegSem_B010401_length_restrictions_002 { var MessageType v_testMessage; template MessageType mw_matchingTemplate:= { - field1 := pattern "test s*g" length (6 .. 15), - field2 := '10*'B length (3 .. 5), - field3 := '89?AB'H length (6), //pattern is shorter than length restriction - field4 := pattern "tes?" length (4 .. 13), - field5 := '10?'B length (3 .. 5), - field6 := '89?ABC'H length (6) + field1 := { permutation ( 1, 2, 3 ), * } length (3..4), + field2 := { (1,2),* } length (2 .. 5), + field3 := { permutation ( 1, 2, 3 ), ? } length (2..3), // message length is too long + field4 := { (1,2),? } length (2 .. 5) } v_testMessage:= { - field1 := "test string", - field2 := '10101'B, - field3 := '89ABC'H, - field4 := "test", - field5 := '101'B, - field6 := '899ABC'H + field1 := {2,1,3}, + field2 := {2,1,3,5}, + field3 := {2,1,3,5}, + field4 := {1,1} } - connect(self:messagePort, self:messagePort); - messagePort.send(v_testMessage); + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); alt { [] messagePort.receive(mw_matchingTemplate) { @@ -74,7 +69,7 @@ module NegSem_B010401_length_restrictions_002 { } } } - + control{ execute(TC_NegSem_B010401_length_restrictions_002()); } diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn new file mode 100644 index 000000000..ad66942c4 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn @@ -0,0 +1,83 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions + ** @verdict pass reject + ***************************************************/ + +module Sem_B010401_length_restrictions_003 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3, + charstring field4, + bitstring field5, + hexstring field6 + } + + type port loopbackPort message { + inout MessageType + } with {extension "internal"} + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_Sem_B010401_length_restrictions_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= { + field1 := pattern "test mess*ge" length (6 .. 8),//pattern is longer than length restriction + field2 := '10*'B length (3 .. 5), + field3 := '89*ABC'H length (5), + field4 := pattern "tes?" length (4 .. 13), + field5 := '10?'B length (3 .. 5), + field6 := '89?ABC'H length (6) + } + + v_testMessage:= { + field1 := "test message", + field2 := '10101'B, + field3 := '89ABC'H, + field4 := "test", + field5 := '101'B, + field6 := '899ABC'H + } + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { //pattern is longer than length restriction, never matches + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } + } + + control{ + execute(TC_Sem_B010401_length_restrictions_003()); + } + +} + diff --git a/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn new file mode 100644 index 000000000..6e7429de2 --- /dev/null +++ b/conformance_test/core_language_tests/positive_tests/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn @@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions + ** @verdict pass reject + ***************************************************/ + +module Sem_B010401_length_restrictions_004 { + + + type record MessageType { + record of integer field1, + record of integer field2, + record of integer field3, + record of integer field4 + } + + type port loopbackPort message { + inout MessageType + } with {extension "internal"} + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_Sem_B010401_length_restrictions_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= { + field1 := { permutation ( 1, 2, 3 ), * } length (4), // message length is too short + field2 := { (1,2),* } length (2 .. 5), + field3 := { permutation ( 1, 2, 3 ), ? } length (4), + field4 := { (1,2),? } length (2 .. 5) + } + + v_testMessage:= { + field1 := {2,1,3}, + field2 := {2,1,3,5}, + field3 := {2,1,3,5}, + field4 := {1,1} + } + + connect(self:messagePort, self:messagePort); + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } + } + + control{ + execute(TC_Sem_B010401_length_restrictions_004()); + } + +} + diff --git a/conformance_test/core_language_tests/positive_tests/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn b/conformance_test/core_language_tests/positive_tests/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn index 161714165..1f87910f4 100644 --- a/conformance_test/core_language_tests/positive_tests/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn +++ b/conformance_test/core_language_tests/positive_tests/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn @@ -1,8 +1,22 @@ -/***************************************************************** - * @author STF 451 - * @version 0.0.1 - * @purpose 1:D, Ensure that __SCOPE__ replaces the actual higher basic unit - * @verdict pass accept, ttcn3verdict:pass +/****************************************************************************** + * Copyright (c) ETSI 2017. + * + * This file is subject to copyrights owned by ETSI. Non-exclusive permission + * is hereby granted, free of charge, to copy, reproduce and amend this file + * under the following conditions: It is provided "as is", without warranty of any + * kind, expressed or implied. + * + * ETSI shall never be liable for any claim, damages, or other liability arising + * from its use or inability of use.This permission does not apply to any documentation + * associated with this file for which ETSI keeps all rights reserved. The present + * copyright notice shall be included in all copies of whole or part of this + * file and shall not imply any sub-license right. + * + * Modified by: Adrien Kirjak + * + ** @version 0.0.1 + ** @purpose 1:D, Ensure that __SCOPE__ replaces the actual higher basic unit + ** @verdict pass accept, ttcn3verdict:pass *****************************************************************/ // __SCOPE__ replaces the actual higher basic unit (name of the test component) module Sem_D05_macro_scope_001 { diff --git a/conformance_test/core_language_tests/positive_tests/README.txt b/conformance_test/core_language_tests/positive_tests/README.txt index 54a7c2eb4..49636fc93 100644 --- a/conformance_test/core_language_tests/positive_tests/README.txt +++ b/conformance_test/core_language_tests/positive_tests/README.txt @@ -1,20 +1,11 @@ // README to positive conformance tests How to run: - -A. (Makefile) - 1. Build and run tests using Makefile in positive tests folder: - make - 2. Clean everything in bin folder: - make clean - - -B. (Without the Makefile) - 1. Generate a Makefile from pos_conf_test.tpd in positive_tests folder: - ttcn3_makefilegen -R -f -t pos_conf_tests.tpd - 2. Compile Makefile in bin folder: +1. Generate a Makefile from pos_conf_test.tpd in positive_tests folder: + ttcn3_makefilegen -f -t pos_conf_tests.tpd +2. Compile Makefile in bin folder: make - 3. Run tests in bin folder: - ttcn3_start pos_conf_tests ../pos_conf_tests.cfg - 4. Clean everything in bin folder: +3. Run tests in bin folder: + ttcn3_start pos_conf_tests +4. Clean everything in bin folder: make clean diff --git a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg index fd672910f..dd38d90bf 100644 --- a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg +++ b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg @@ -12,6 +12,8 @@ Sem_050201_Scope_of_parameters_002.control Sem_050202_Uniqueness_001.control Sem_050202_Uniqueness_002.control Sem_050202_Uniqueness_003.control +Sem_050202_Uniqueness_004.control +Sem_050202_Uniqueness_005.control Sem_0502_Scope_001.control Sem_0502_Scope_002.control Sem_0502_Scope_003.control @@ -71,7 +73,10 @@ Sem_05040102_parameters_of_kind_template_035.control Sem_05040102_parameters_of_kind_template_037.control Sem_05040102_parameters_of_kind_template_038.control Sem_05040103_parameters_of_kind_timer_001.control +Sem_05040103_parameters_of_kind_timer_002.control +Sem_05040103_parameters_of_kind_timer_003.control Sem_05040104_parameters_of_kind_port_001.control +Sem_05040104_parameters_of_kind_port_002.control Sem_050401_top_level_001.control Sem_050401_top_level_003.control Sem_050401_top_level_004.control @@ -291,6 +296,14 @@ Sem_050402_actual_parameters_198.control Sem_050402_actual_parameters_199.control Sem_050402_actual_parameters_200.control Sem_050402_actual_parameters_201.control +Sem_050402_actual_parameters_203.control +Sem_050402_actual_parameters_205.control +Sem_050402_actual_parameters_206.control +Sem_050402_actual_parameters_207.control +Sem_050402_actual_parameters_212.control +Sem_050402_actual_parameters_214.control +Sem_050402_actual_parameters_215.control +Sem_050402_actual_parameters_216.control Sem_0505_cyclic_definitions_001.control Sem_0505_cyclic_definitions_002.control Sem_0505_cyclic_definitions_003.control @@ -421,6 +434,8 @@ Sem_06020501_referencing_fields_of_union_type_003.control Sem_06020501_referencing_fields_of_union_type_004.control Sem_06020501_referencing_fields_of_union_type_005.control Sem_06020501_referencing_fields_of_union_type_006.control +Sem_06020501_referencing_fields_of_union_type_007.control +Sem_06020501_referencing_fields_of_union_type_008.control Sem_060206_anytype_001.control Sem_060206_anytype_002.control Sem_060206_anytype_003.control @@ -592,6 +607,8 @@ Sem_070103_RelationalOperators_044.control Sem_070103_RelationalOperators_045.control Sem_070103_RelationalOperators_046.control Sem_070103_RelationalOperators_047.control +Sem_070103_RelationalOperators_048.control +Sem_070103_RelationalOperators_049.control Sem_070104_LogicalOperators_001.control Sem_070104_LogicalOperators_002.control Sem_070105_BitwiseOperators_001.control @@ -612,6 +629,9 @@ Sem_07_toplevel_003.control Sem_07_toplevel_004.control Sem_07_toplevel_005.control Sem_07_toplevel_006.control +Sem_07_toplevel_007.control +Sem_07_toplevel_008.control +Sem_07_toplevel_009.control Sem_080201_ModuleParameters_001.control Sem_08020301_GeneralFormatOfImport_001.control Sem_08020301_GeneralFormatOfImport_002.control @@ -671,6 +691,7 @@ Sem_1101_ValueVars_002.control Sem_1101_ValueVars_003.control Sem_1101_ValueVars_004.control Sem_1101_ValueVars_005.control +Sem_1101_ValueVars_006.control Sem_1102_TemplateVars_001.control Sem_1102_TemplateVars_002.control Sem_1102_TemplateVars_003.control @@ -782,6 +803,11 @@ Sem_1509_MatchOperation_006.control Sem_1509_MatchOperation_007.control Sem_1509_MatchOperation_008.control Sem_1509_MatchOperation_010.control +Sem_1509_MatchOperation_011.control +Sem_1509_MatchOperation_012.control +Sem_1509_MatchOperation_013.control +Sem_1509_MatchOperation_015.control +Sem_1509_MatchOperation_016.control Sem_1510_ValueOfOperation_001.control Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.control Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.control @@ -843,6 +869,7 @@ Sem_160102_predefined_functions_058.control Sem_160102_predefined_functions_059.control Sem_160102_predefined_functions_060.control Sem_160102_predefined_functions_061.control +Sem_160102_predefined_functions_062.control Sem_160102_predefined_functions_063.control Sem_160102_predefined_functions_064.control Sem_160102_predefined_functions_065.control @@ -871,6 +898,11 @@ Sem_160102_predefined_functions_089.control Sem_160102_predefined_functions_090.control Sem_160102_predefined_functions_091.control Sem_160102_predefined_functions_092.control +Sem_160102_predefined_functions_095.control +Sem_160102_predefined_functions_096.control +Sem_160102_predefined_functions_097.control +Sem_160102_predefined_functions_098.control +Sem_160102_predefined_functions_099.control Sem_160103_external_functions_001.control Sem_160103_external_functions_002.control Sem_1601_toplevel_001.control @@ -890,12 +922,15 @@ Sem_190301_select_case_statement_001.control Sem_190301_select_case_statement_002.control Sem_190301_select_case_statement_003.control Sem_190301_select_case_statement_004.control +Sem_190301_select_case_statement_005.control +Sem_190301_select_case_statement_006.control Sem_190302_select_union_statement_001.control Sem_190302_select_union_statement_002.control Sem_190302_select_union_statement_003.control Sem_190302_select_union_statement_004.control Sem_190302_select_union_statement_005.control Sem_190302_select_union_statement_006.control +Sem_190302_select_union_statement_007.control Sem_1904_for_statement_001.control Sem_1904_for_statement_002.control Sem_1904_for_statement_003.control @@ -982,6 +1017,8 @@ Sem_210302_Start_test_component_006.control Sem_210302_Start_test_component_007.control Sem_210302_Start_test_component_008.control Sem_210302_Start_test_component_010.control +Sem_210302_Start_test_component_013.control +Sem_210302_Start_test_component_014.control Sem_210303_Stop_test_component_001.control Sem_210303_Stop_test_component_002.control Sem_210303_Stop_test_component_003.control @@ -1074,6 +1111,7 @@ Sem_220202_ReceiveOperation_024.control Sem_220202_ReceiveOperation_026.control Sem_220202_ReceiveOperation_027.control Sem_220202_ReceiveOperation_029.control +Sem_220202_ReceiveOperation_030.control Sem_220203_TriggerOperation_001.control Sem_220203_TriggerOperation_002.control Sem_220203_TriggerOperation_003.control @@ -1100,6 +1138,11 @@ Sem_220301_CallOperation_002.control Sem_220301_CallOperation_003.control Sem_220301_CallOperation_004.control Sem_220301_CallOperation_008.control +Sem_220301_CallOperation_009.control +Sem_220301_CallOperation_010.control +Sem_220301_CallOperation_017.control +Sem_220301_CallOperation_018.control +Sem_220301_CallOperation_019.control Sem_220302_GetcallOperation_001.control Sem_220302_GetcallOperation_002.control Sem_220302_GetcallOperation_003.control @@ -1117,6 +1160,10 @@ Sem_220302_GetcallOperation_015.control Sem_220302_GetcallOperation_016.control Sem_220302_GetcallOperation_017.control Sem_220302_GetcallOperation_018.control +Sem_220302_GetcallOperation_020.control +Sem_220303_ReplyOperation_003.control +Sem_220303_ReplyOperation_004.control +Sem_220303_ReplyOperation_005.control Sem_220304_getreply_operation_001.control Sem_220304_getreply_operation_002.control Sem_220304_getreply_operation_003.control @@ -1135,6 +1182,8 @@ Sem_220304_getreply_operation_016.control Sem_220304_getreply_operation_017.control Sem_220304_getreply_operation_018.control Sem_220304_getreply_operation_019.control +Sem_220304_getreply_operation_021.control +Sem_220304_getreply_operation_022.control Sem_220305_raise_operation_001.control Sem_220305_raise_operation_002.control Sem_220306_catch_operation_001.control @@ -1149,6 +1198,8 @@ Sem_220306_catch_operation_010.control Sem_220306_catch_operation_011.control Sem_220306_catch_operation_012.control Sem_220306_catch_operation_013.control +Sem_220306_catch_operation_015.control +Sem_220306_catch_operation_016.control Sem_2204_the_check_operation_001.control Sem_2204_the_check_operation_003.control Sem_2204_the_check_operation_005.control @@ -1265,6 +1316,7 @@ Sem_2403_getverdict_005.control Sem_2601_ExecuteStatement_001.control Sem_2601_ExecuteStatement_002.control Sem_2601_ExecuteStatement_005.control +Sem_2601_ExecuteStatement_010.control Sem_2602_TheControlPart_001.control Sem_2602_TheControlPart_002.control Sem_2707_OptionalAttributes_001.control @@ -1288,6 +1340,9 @@ Sem_B0101_matching_specific_value_009.control Sem_B0101_matching_specific_value_010.control Sem_B0101_matching_specific_value_011.control Sem_B010201_value_list_001.control +Sem_B010201_value_list_002.control +Sem_B010201_value_list_003.control +Sem_B010201_value_list_004.control Sem_B010202_complemented_value_list_001.control Sem_B010202_complemented_value_list_002.control Sem_B010202_complemented_value_list_003.control @@ -1301,6 +1356,8 @@ Sem_B010203_any_value_002.control Sem_B010204_any_value_or_none_001.control Sem_B010204_any_value_or_none_002.control Sem_B010204_any_value_or_none_003.control +Sem_B010204_any_value_or_none_004.control +Sem_B010204_any_value_or_none_005.control Sem_B010205_value_range_001.control Sem_B010205_value_range_002.control Sem_B010205_value_range_003.control @@ -1357,6 +1414,8 @@ Sem_B010303_permutation_008.control Sem_B010303_permutation_009.control Sem_B010401_length_restrictions_001.control Sem_B010401_length_restrictions_002.control +Sem_B010401_length_restrictions_003.control +Sem_B010401_length_restrictions_004.control Sem_B010402_ifPresent_indicator_001.control Sem_B010402_ifPresent_indicator_002.control Sem_B010501_set_expression_001.control diff --git a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd index 106af0732..b9c2429f3 100644 --- a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd +++ b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd @@ -281,6 +281,8 @@ <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_001_import.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_001_import.ttcn"/> <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_002.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_002.ttcn"/> <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_003.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_003.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn"/> <!-- <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_001.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_001.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_002.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_002.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_003.ttcn" relativeURI="05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_003.ttcn"/>--> @@ -366,6 +368,8 @@ <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_015.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_015.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_016.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_016.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_017.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_017.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_018.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_018.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_019.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_019.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSyn_05040102_parameters_of_kind_template_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSyn_05040102_parameters_of_kind_template_001.ttcn"/>--> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_001.ttcn"/> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_002.ttcn"/> @@ -405,8 +409,23 @@ <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_036.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_036.ttcn"/>--> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_037.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_037.ttcn"/> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_038.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_038.ttcn"/> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_002.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_003.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_003.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_004.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_002.ttcn"/>--> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_001.ttcn"/> - <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_002.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_003.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_003.ttcn"/> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_001.ttcn"/> --> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_002.ttcn"/> --> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_003.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_003.ttcn"/> --> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_004.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_004.ttcn"/> --> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_005.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_005.ttcn"/> --> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_006.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_006.ttcn"/> --> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_002.ttcn"/> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_001.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn"/>--> @@ -584,6 +603,43 @@ <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_143.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_143.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_144.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_144.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_145.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_145.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn"/>--> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_001.ttcn"/> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_002.ttcn"/> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_003.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_003.ttcn"/> @@ -785,6 +841,30 @@ <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_200.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_200.ttcn"/> <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_201.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_201.ttcn"/> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_202.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_202.ttcn"/>--> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn"/> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn"/>--> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn"/> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn"/>--> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn"/> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn"/>--> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn"/> + <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn"/> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn"/>--> +<!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/0504_toplevel/NegSem_0504_parametrization_incompatibility_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/0504_toplevel/NegSem_0504_parametrization_incompatibility_001.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_001.ttcn"/>--> <!-- <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_002.ttcn"/>--> @@ -813,6 +893,12 @@ <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_004.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_004.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_005.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_005.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_006.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_006.ttcn"/> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_001.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_002.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_002.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_003.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_003.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_004.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_005.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_006.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSem_06010101_AccessStringElements_006.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_001.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_001.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_002.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_002.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_003.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_003.ttcn"/> @@ -839,6 +925,14 @@ <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_005.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_005.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_006.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_006.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_007.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_007.ttcn"/> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_015.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_015.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_001.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_001.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_002.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_002.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_003.ttcn" relativeURI="06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_003.ttcn"/> @@ -1047,6 +1141,8 @@ <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_010_import.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_010_import.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011_import.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011_import.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_012.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_012.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_001.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_001.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_002.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_003.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_003.ttcn"/> @@ -1054,6 +1150,7 @@ <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_005.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_005.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006_import.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006_import.ttcn"/> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_007.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_007.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_001.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_002.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_003.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_003.ttcn"/> @@ -1072,6 +1169,8 @@ <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_004.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_004.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_005.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_005.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_006.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_006.ttcn"/> + <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_007.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_007.ttcn"/> + <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_008.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_008.ttcn"/> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/06020502_option_and_union/NegSyn_06020502_option_and_union_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/06020502_option_and_union/NegSyn_06020502_option_and_union_001.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/06020503_nested_type_definition_for_field_types/Syn_06020503_nested_type_definition_for_field_types_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/06020503_nested_type_definition_for_field_types/Syn_06020503_nested_type_definition_for_field_types_001.ttcn"/> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_001.ttcn"/>--> @@ -1140,6 +1239,7 @@ <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_002.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_003.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_003.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_004.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_001.ttcn"/> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_002.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_003.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_003.ttcn"/> @@ -1209,6 +1309,8 @@ <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_002.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_003.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_003.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_004.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_005.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_006.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_006.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_001.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_002.ttcn"/> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_001.ttcn"/>--> @@ -1223,6 +1325,10 @@ <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_001.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_002.ttcn"/>--> <!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_003.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_003.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn"/>--> +<!-- <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn"/>--> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_001.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_001.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_002.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_002.ttcn"/> <FileResource projectRelativePath="06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_003.ttcn" relativeURI="06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_003.ttcn"/> @@ -1435,6 +1541,9 @@ <FileResource projectRelativePath="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_045.ttcn" relativeURI="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_045.ttcn"/> <FileResource projectRelativePath="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_046.ttcn" relativeURI="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_046.ttcn"/> <FileResource projectRelativePath="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_047.ttcn" relativeURI="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_047.ttcn"/> + <FileResource projectRelativePath="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn" relativeURI="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn"/> + <FileResource projectRelativePath="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn" relativeURI="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn"/> +<!-- <FileResource projectRelativePath="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn" relativeURI="07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn"/>--> <FileResource projectRelativePath="07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_001.ttcn" relativeURI="07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_001.ttcn"/> <FileResource projectRelativePath="07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_002.ttcn" relativeURI="07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_002.ttcn"/> <FileResource projectRelativePath="07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_001.ttcn" relativeURI="07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_001.ttcn"/> @@ -1460,6 +1569,9 @@ <FileResource projectRelativePath="07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn" relativeURI="07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn"/> <FileResource projectRelativePath="07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn" relativeURI="07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn"/> <FileResource projectRelativePath="07_expressions/07_toplevel/Sem_07_toplevel_006.ttcn" relativeURI="07_expressions/07_toplevel/Sem_07_toplevel_006.ttcn"/> + <FileResource projectRelativePath="07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn" relativeURI="07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn"/> + <FileResource projectRelativePath="07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn" relativeURI="07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn"/> + <FileResource projectRelativePath="07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn" relativeURI="07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn"/> <!-- <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/NegSyn_0801_DefinitionOfAModule_001.ttcn" relativeURI="08_modules/0801_definition_of_a_module/NegSyn_0801_DefinitionOfAModule_001.ttcn"/>--> <!-- <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_001.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_001.ttcn"/> <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_002.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_002.ttcn"/>--> @@ -1469,7 +1581,16 @@ <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_006.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_006.ttcn"/> <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_007.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_007.ttcn"/> <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_008.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_008.ttcn"/> - <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn"/>--> + <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn"/> + <FileResource projectRelativePath="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn" relativeURI="08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn"/>--> <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_001.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_001.ttcn"/> <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_001.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_001.ttcn"/> <FileResource projectRelativePath="08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_002.ttcn" relativeURI="08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_002.ttcn"/> @@ -1748,18 +1869,21 @@ <!-- <FileResource projectRelativePath="11_variables/1101_value_variables/NegSem_1101_ValueVars_002.ttcn" relativeURI="11_variables/1101_value_variables/NegSem_1101_ValueVars_002.ttcn"/>--> <!-- <FileResource projectRelativePath="11_variables/1101_value_variables/NegSem_1101_ValueVars_003.ttcn" relativeURI="11_variables/1101_value_variables/NegSem_1101_ValueVars_003.ttcn"/>--> <!-- <FileResource projectRelativePath="11_variables/1101_value_variables/NegSem_1101_ValueVars_004.ttcn" relativeURI="11_variables/1101_value_variables/NegSem_1101_ValueVars_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn" relativeURI="11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn"/>--> <!-- <FileResource projectRelativePath="11_variables/1101_value_variables/NegSyn_1101_ValueVars_001.ttcn" relativeURI="11_variables/1101_value_variables/NegSyn_1101_ValueVars_001.ttcn"/>--> <FileResource projectRelativePath="11_variables/1101_value_variables/Sem_1101_ValueVars_001.ttcn" relativeURI="11_variables/1101_value_variables/Sem_1101_ValueVars_001.ttcn"/> <FileResource projectRelativePath="11_variables/1101_value_variables/Sem_1101_ValueVars_002.ttcn" relativeURI="11_variables/1101_value_variables/Sem_1101_ValueVars_002.ttcn"/> <FileResource projectRelativePath="11_variables/1101_value_variables/Sem_1101_ValueVars_003.ttcn" relativeURI="11_variables/1101_value_variables/Sem_1101_ValueVars_003.ttcn"/> <FileResource projectRelativePath="11_variables/1101_value_variables/Sem_1101_ValueVars_004.ttcn" relativeURI="11_variables/1101_value_variables/Sem_1101_ValueVars_004.ttcn"/> <FileResource projectRelativePath="11_variables/1101_value_variables/Sem_1101_ValueVars_005.ttcn" relativeURI="11_variables/1101_value_variables/Sem_1101_ValueVars_005.ttcn"/> + <FileResource projectRelativePath="11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn" relativeURI="11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn"/> <FileResource projectRelativePath="11_variables/1101_value_variables/Syn_1101_ValueVars_001.ttcn" relativeURI="11_variables/1101_value_variables/Syn_1101_ValueVars_001.ttcn"/> <!-- <FileResource projectRelativePath="11_variables/1102_template_variables/NegSem_1102_TemplateVars_001.ttcn" relativeURI="11_variables/1102_template_variables/NegSem_1102_TemplateVars_001.ttcn"/>--> <!-- <FileResource projectRelativePath="11_variables/1102_template_variables/NegSem_1102_TemplateVars_002.ttcn" relativeURI="11_variables/1102_template_variables/NegSem_1102_TemplateVars_002.ttcn"/>--> <!-- <FileResource projectRelativePath="11_variables/1102_template_variables/NegSem_1102_TemplateVars_003.ttcn" relativeURI="11_variables/1102_template_variables/NegSem_1102_TemplateVars_003.ttcn"/>--> <!-- <FileResource projectRelativePath="11_variables/1102_template_variables/NegSem_1102_TemplateVars_004.ttcn" relativeURI="11_variables/1102_template_variables/NegSem_1102_TemplateVars_004.ttcn"/>--> <!-- <FileResource projectRelativePath="11_variables/1102_template_variables/NegSyn_1102_TemplateVars_001.ttcn" relativeURI="11_variables/1102_template_variables/NegSyn_1102_TemplateVars_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn" relativeURI="11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn"/>--> <FileResource projectRelativePath="11_variables/1102_template_variables/Sem_1102_TemplateVars_001.ttcn" relativeURI="11_variables/1102_template_variables/Sem_1102_TemplateVars_001.ttcn"/> <FileResource projectRelativePath="11_variables/1102_template_variables/Sem_1102_TemplateVars_002.ttcn" relativeURI="11_variables/1102_template_variables/Sem_1102_TemplateVars_002.ttcn"/> <FileResource projectRelativePath="11_variables/1102_template_variables/Sem_1102_TemplateVars_003.ttcn" relativeURI="11_variables/1102_template_variables/Sem_1102_TemplateVars_003.ttcn"/> @@ -2018,6 +2142,8 @@ <FileResource projectRelativePath="15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_003.ttcn" relativeURI="15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_003.ttcn"/> <FileResource projectRelativePath="15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_004.ttcn" relativeURI="15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_004.ttcn"/> <!-- <FileResource projectRelativePath="15_templates/1509_match_operation/NegSem_1509_MatchOperation_001.ttcn" relativeURI="15_templates/1509_match_operation/NegSem_1509_MatchOperation_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn" relativeURI="15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn"/>--> +<!-- <FileResource projectRelativePath="15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn" relativeURI="15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn"/>--> <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_001.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_001.ttcn"/> <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_002.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_002.ttcn"/> <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_003.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_003.ttcn"/> @@ -2028,6 +2154,12 @@ <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_008.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_008.ttcn"/> <!-- <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_009.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_009.ttcn"/>--> <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_010.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_010.ttcn"/> + <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn"/> + <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn"/> + <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn"/> +<!-- <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn"/>--> + <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn"/> + <FileResource projectRelativePath="15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn" relativeURI="15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn"/> <!-- <FileResource projectRelativePath="15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_001.ttcn" relativeURI="15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_002.ttcn" relativeURI="15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_003.ttcn" relativeURI="15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_003.ttcn"/>--> @@ -2092,6 +2224,8 @@ <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_036.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_036.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_037.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_037.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_038.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_038.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn"/>--> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_001.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_001.ttcn"/> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_002.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_002.ttcn"/>--> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_003.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_003.ttcn"/> @@ -2153,6 +2287,7 @@ <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_059.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_059.ttcn"/> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_060.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_060.ttcn"/> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_061.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_061.ttcn"/> +<FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn"/> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_063.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_063.ttcn"/> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_064.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_064.ttcn"/> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_065.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_065.ttcn"/> @@ -2183,6 +2318,13 @@ <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_090.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_090.ttcn"/> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_091.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_091.ttcn"/> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_092.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_092.ttcn"/> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn"/>--> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn"/> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160103_external_functions/NegSem_160103_external_functions_001.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160103_external_functions/NegSem_160103_external_functions_001.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160103_external_functions/xf_NegSem_160103_external_functions_001.cc" relativeURI="16_functions_altsteps_testcases/1601_functions/160103_external_functions/xf_NegSem_160103_external_functions_001.cc"/>--> <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_001.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_001.ttcn"/> @@ -2194,6 +2336,306 @@ <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_002.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_002.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_003.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_003.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_004.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_038.cc" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_038.cc"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn"/>--> +<!--<FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_079.cc" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_079.cc"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_120.cc" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_120.cc"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_163.cc" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_163.cc"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_245.cc" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_245.cc"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn"/> + <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_288.cc" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/xf_NegSem_160104_invoking_functions_from_specific_places_288.cc"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_001.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_001.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_002.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_002.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_003.ttcn" relativeURI="16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_003.ttcn"/>--> @@ -2219,8 +2661,11 @@ <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_004.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_004.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_005.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_005.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_006.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_006.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSyn_1602_toplevel_001.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSyn_1602_toplevel_001.ttcn"/>--> <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_001.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_001.ttcn"/> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn"/>--> +<!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn" relativeURI="16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_001.ttcn" relativeURI="16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_001.ttcn"/>--> <!-- <FileResource projectRelativePath="16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_002.ttcn" relativeURI="16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_002.ttcn"/>--> <FileResource projectRelativePath="16_functions_altsteps_testcases/1603_testcases/Syn_1603_testcases_001.ttcn" relativeURI="16_functions_altsteps_testcases/1603_testcases/Syn_1603_testcases_001.ttcn"/> @@ -2242,17 +2687,21 @@ <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn"/> + <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn"/> + <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn"/> <!-- <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn"/>--> <!-- <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn"/>--> <!-- <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn"/>--> <!-- <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn"/>--> <!-- <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn"/>--> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn"/> + <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_007.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_007.ttcn"/> <!-- <FileResource projectRelativePath="19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn" relativeURI="19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn"/>--> <FileResource projectRelativePath="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn" relativeURI="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn" relativeURI="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn"/> @@ -2289,7 +2738,7 @@ <FileResource projectRelativePath="19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_004.ttcn" relativeURI="19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_004.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_005.ttcn" relativeURI="19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_005.ttcn"/> <FileResource projectRelativePath="19_basic_program_statements/1913_continue_statement/Sem_1913_continue_statement_001.ttcn" relativeURI="19_basic_program_statements/1913_continue_statement/Sem_1913_continue_statement_001.ttcn"/> - <!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn"/>--> <!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn"/>--> <!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn"/>--> <!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn"/>--> @@ -2305,6 +2754,77 @@ <!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn"/>--> <!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn"/>--> <!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn"/> + <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/xf_NegSem_2002_TheAltStatement_050.cc" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/xf_NegSem_2002_TheAltStatement_050.cc"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn"/>--> +<!-- <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn"/>--> <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_001.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_001.ttcn"/> <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_002.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_002.ttcn"/> <FileResource projectRelativePath="20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_003.ttcn" relativeURI="20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_003.ttcn"/> @@ -2473,6 +2993,10 @@ <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_008.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_008.ttcn"/> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_009.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_009.ttcn"/> --> <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_010.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_010.ttcn"/> +<!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn"/> --> +<!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn"/> --> + <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn"/> + <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn"/> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_001.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_001.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_002.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_002.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_003.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_003.ttcn"/>--> @@ -2523,6 +3047,7 @@ <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_012.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_012.ttcn"/> <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn"/> <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn"/> +<!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_001.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_002.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_003.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_003.ttcn"/>--> @@ -2545,6 +3070,7 @@ <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_010.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_010.ttcn"/> <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_011.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_011.ttcn"/> <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_012.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_012.ttcn"/> +<!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_001.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_002.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_003.ttcn" relativeURI="21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_003.ttcn"/>--> @@ -2669,6 +3195,7 @@ <FileResource projectRelativePath="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_027.ttcn" relativeURI="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_027.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_028.ttcn" relativeURI="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_028.ttcn"/>--> <FileResource projectRelativePath="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_029.ttcn" relativeURI="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_029.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn" relativeURI="22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_001.ttcn" relativeURI="22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_002.ttcn" relativeURI="22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_003.ttcn" relativeURI="22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_003.ttcn"/>--> @@ -2724,6 +3251,25 @@ <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn"/>--> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_001.ttcn"/> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_002.ttcn"/> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_003.ttcn"/> @@ -2732,6 +3278,19 @@ <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn"/>--> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_008.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_008.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn"/> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn"/>--> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn"/> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_021.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_021.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn"/>--> @@ -2770,11 +3329,24 @@ <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_017.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_017.ttcn"/> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_018.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_018.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_019.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_019.ttcn"/>--> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_020.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_020.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_021.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_021.ttcn"/> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_022.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_022.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_002.ttcn"/>--> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_003.ttcn"/>--> @@ -2795,6 +3367,8 @@ <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_018.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_018.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_019.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_019.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_002.ttcn"/>--> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_001.ttcn"/> @@ -2817,6 +3391,9 @@ <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_018.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_018.ttcn"/> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_019.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_019.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_020.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_020.ttcn"/>--> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn"/> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn"/>--> @@ -2826,6 +3403,7 @@ <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_009.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_009.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn"/>--> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_001.ttcn"/> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_002.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_003.ttcn"/>--> @@ -2844,6 +3422,8 @@ <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_012.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_012.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_013.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_013.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_003.ttcn"/>--> @@ -2861,9 +3441,14 @@ <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_012.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_012.ttcn"/> <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_013.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_013.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_014.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_014.ttcn"/>--> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn"/> + <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn"/> +<!-- <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_001.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_001.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_002.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_002.ttcn"/>--> <!-- <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_003.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_003.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn"/>--> +<!-- <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn"/>--> <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_001.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_001.ttcn"/> <!-- <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_002.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_002.ttcn"/>--> <FileResource projectRelativePath="22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_003.ttcn" relativeURI="22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_003.ttcn"/> @@ -3115,6 +3700,7 @@ <!-- <FileResource projectRelativePath="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_007.ttcn" relativeURI="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_007.ttcn"/>--> <!-- <FileResource projectRelativePath="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_008.ttcn" relativeURI="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_008.ttcn"/>--> <!-- <FileResource projectRelativePath="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_009.ttcn" relativeURI="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_009.ttcn"/>--> + <FileResource projectRelativePath="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn" relativeURI="26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn"/> <!-- <FileResource projectRelativePath="26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_001.ttcn" relativeURI="26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_001.ttcn"/>--> <!-- <FileResource projectRelativePath="26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_002.ttcn" relativeURI="26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_002.ttcn"/>--> <!-- <FileResource projectRelativePath="26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_003.ttcn" relativeURI="26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_003.ttcn"/>--> @@ -3173,6 +3759,7 @@ <FileResource projectRelativePath="27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_002.ttcn" relativeURI="27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_002.ttcn"/> <FileResource projectRelativePath="27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_003.ttcn" relativeURI="27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_003.ttcn"/> <FileResource projectRelativePath="27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_004.ttcn" relativeURI="27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_004.ttcn"/> +<!-- <FileResource projectRelativePath="27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn" relativeURI="27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn"/>--> <!-- <FileResource projectRelativePath="27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_002.ttcn" relativeURI="27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_002.ttcn"/>--> <!-- <FileResource projectRelativePath="27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_003.ttcn" relativeURI="27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_003.ttcn"/>--> <FileResource projectRelativePath="27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_001.ttcn" relativeURI="27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_001.ttcn"/> @@ -3197,8 +3784,15 @@ <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_008.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_008.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_009.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_009.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_010.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_010.ttcn"/> - <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn"/> +<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn"/>--> +<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn"/>--> +<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn"/>--> +<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn"/>--> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_001.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn"/> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_001.ttcn"/>--> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_002.ttcn"/>--> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_003.ttcn"/>--> @@ -3215,11 +3809,11 @@ <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_002.ttcn"/> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_001.ttcn"/>--> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_002.ttcn"/>--> -<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_003.ttcn"/>--> -<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_004.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_004.ttcn"/>--> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_001.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_002.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_003.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_004.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_004.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_005.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_005.ttcn"/> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_001.ttcn"/>--> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_002.ttcn"/>--> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_003.ttcn"/>--> @@ -3276,6 +3870,7 @@ <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_003.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_004.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_004.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_005.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_005.ttcn"/> +<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn"/>--> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_001.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_002.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_003.ttcn"/> @@ -3304,10 +3899,10 @@ <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_009.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_009.ttcn"/> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_001.ttcn"/>--> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_002.ttcn"/>--> -<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_003.ttcn"/>--> -<!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_004.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_004.ttcn"/>--> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_001.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_002.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn"/> + <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn"/> <!-- <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/NegSem_B010402_ifPresent_indicator_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/NegSem_B010402_ifPresent_indicator_001.ttcn"/>--> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_001.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_001.ttcn"/> <FileResource projectRelativePath="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_002.ttcn" relativeURI="B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_002.ttcn"/> diff --git a/usrguide/SoC_TITAN.docx b/usrguide/SoC_TITAN.docx index f9a82c1067ed3401b596fabbcb97176d0fd6c973..0a48e55e1b0d2c8d2fab93059e34faed59a29327 100644 GIT binary patch delta 282955 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	aytp&F=P@<M-3x1}^07+OaS5@mPUaB|`urT-m2u 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ℜwcWLW#uSvPQG?R_>U>#q>_a3d1 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%0Duh8hrJxr_1`DETPcrFg6;SU-@O<?D?H_>Gz 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%0D;EK5MC{!eG(BL-C)yA5MQz!A(z3cu?>+}8* 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 Az5oCK delta 246777 zcmZs>WmH~06E2LqwYa-e+}$bO7I!FCoE!IzYjH2`F2&v5{l?whT~43(`_}n&*8Z`x zlI%$`lew<RWCw*2L|oxk!yqBQELX-7s6#_k#%0H&BjEzxC$>BMHRm7D>8@ngJK2PX zR7n>Trwh{CRP9i=)Q2V&sR2ub&|0}RN~3Yf%(CV_XYfn#Ddwp%OUe$K`6luWUc&|3 zBkb_C{9(*kTK!d;Cf-c%E1e(dkEc;Ge-Q$r;TOK2`CfIQ3Vr%5O!DgC>Aomr2-=3p z+zEmFaJvM$b^?ILkB5)v#urQ$r&&bw&omJT+wm_YFIR@?RI~9rJB!3OVVI<ffrLRI zUWKStdj}%4ke<E42cunLu$8*v8+W95^5EZB{SCzP^hYwriMM7w3;o^I(d3-2{l5Y( zxq%<)$wopgF$<uJrdHi=Z-}tNI13g1xiq6ckct4o7@iO#PSEEkb58zD-sxy34?6iw z{xCcQ11j{IDQy83npd|N>26u|zO8ch%aO23g?mbXa(Tb?Iq^oJ_Bdkj(}O8-4;e|s zk%CZsQ4)<^)Q$N00@t?f_QB+ua>f45^Fs5&Xj_*}X%@ZX_Q{_rmg!QPoKJK=?+3Wm z=m3DDYPj!H_iL~6XGO6l^%D^6Tr$$H!B>z}T@6LlPRKA3!NctIP2DR!((F+i=T+NG zr9WwHP1mhZZh3hlmZ$w|+sNwgjFQ0XKA~m;SfgDOFD=RvPn!9`1US6x-L9lycMK2o zOUIFO<$R-u4nVMYp5U!8;YG~nh~GcL`~Zk_sSs{;n+Q=lrX7toz$FpZXK0x(Zk&A9 z!PWEe@}5R6ux4oS8pKj8ICQk&(oR+@xGk5ys9D9Y2~i^l$3BDN1s`hyvR3)t2LlY6 zpwAJ#_TBEks#dzFm$&4RBJ`Zlp@cjaoNAkG?p4iVetM+X9K!@TFv|0O>&zJUc>x4p zPzju}yIi(m&Ut@V3Lf#!Ymd7$&JNkyD^nd`_ovSD#pg9V!+fOrw!&m8md%#ve9?+} zA<H^;ZfTd6A669RB68qqo|=3<HYO{9hC>xF{I})q)N7N3n7pe`LJ^-z_92ne!#I(^ zJ&H4-wPyFBFL&oEy9$Fn?Z0=SrvQfo6V;|`J}00rHNzp3mHBv@4&lX^7Vm1-jiHQ% zu;8xt{blmaGN;&)7Nkk=W#x5TO0mAr#NxU!{-|90y3srtXI0i)G;Ir=K3qYkURQ^# z;1x#@L0refZZqPj;L`gS^Xo(|rZB#}R@AAN9$gP#SbQk$Ii3&kh)kzEH6W@LL|D4& z{{2#;d}=5Cl}H-%kshA>US<9q@?8yfRKK-hlw{H%OB!??7J>=aIW#iNPlwItnzd8T z{Y0td>;yYkbuDryDVEjW>1;kjr-qm5hkL2Z4v8#nk{xJC!j7IAqJKla5gR~_E=U5p zSjNAq4HXcHGOyamqPjm41+-}g6|>8!SU$lyH?<eQfA6SGga^?O@9J29=MdblU3of% z5%yM98_Sm~=&;fk8;zM!iKC6uGb@6=M!zY!37Unqd2*#b6ET-Pah!zs5%54I*Alub zuKm2IeCD~>5^|0n2IgCBx3&TY5hGM$FPF}cH3%GzZa2dF5EsvEfR7WSfUubdIq~s# z+0#6kQEi^L+g#iEt}FLHP}?Ota#mkR3GA2P_^#(UXr-5(l=bhQFxrAWiYltin3qN0 zwgisV3aChk-aX<iWQFQ}=x8O9Y7ih4kt&f=un~xK7?`aWS?e6s$*HSX&D-gd4KuvU zh)k@gO|D+rP(P&q1mq};FIFGQ^~>hb_Lv%Kr{Lj@9-)&OOfI57Yw7PJ$zJI4NdPZc znSAHyZ^N%k$nz#|`L<`$Pdo$_v(HlBuaqq?-TdTmYs`=irZaAj7p16Hd6Vor_Jor; zTwOdGLhHhjgsYf!mUQ~I+4`)qo`qHPXv|Wb+9_QGaM<u9fTKIb6iPMpfeFyO_^(Td z;us&E=)j%9)@1&0O(H(mG~P_>y9`P%%|j!4lw7&bHAnF&LA^70_8D?j>!w*jqtH(W z8P2LN0VDhRN-zVp=VWuNj4#Lvqm*o4jpkmmJtEt9akEq!b_6~R>Lj>u-?evkifp%( zl{{5W%0vNUK+*eFhME8YEhd0`mBg5W8Z%k3`TeMOa3HxPX1Y04Z{rgtiIBEt6?Jlv ztVuJvO#-aj=}c8{V*OaC|J9J5D{C8w|53mdGbzwPp#>8I+w_3~Kg6QPpEVXI$(=rA z<y#cOkMpDH@If|A$Ta(>a@^;w!!79eSqL_y1fe(|z>D9>(C91D;jeRvK4Y0Ef8&Fw z(d|?gBI08e+YX`&yl9H2wAao9g<UKp2GnH0S8$J~z(sVk_iGC|D@FcakNmmHFQV5& zi5uY)F+$}DIsE3shN+DEBd;UD&VI=!MUwucdwd3e6Cyauz*&(Jr3t5T43cRT*E3Qg z90tz<Kp018ZPpXCp>a;11s)*yi_<D{DgFs_<RDnai+N39=^IOWr_uZ|muW`y&5Rgk zDx^B>k~{VsrQ@3V_!$$O#^l)uwn64<iJO@E+|<LfG5o3b{mNOdDh}Hw<tG#8G>xw? zGfx5Y>DV{*D|X)Zq~rqCXoT>mA_FMvneDaTfQ4}ML9b&;hh?@87t;sbio??hxrz~f zv$Ku->6ZB)ei^AA=QmqlT2PEMTSY)WH4ymb{N`vW5b_L^0yIStbtx`5ag?t1rCd<Y zqqn+8c-DC7b%ilAr{?usRz!vOK%Pvdcuy3Mkj^TfIQV8eQP<3>=1-jkFn+|K%i;?E z2FPl%^Xpg_Tq_2i3eap1D!zok+$fu5(BVq0Z$`r#*e>EilCms(dakOUio6q{k}6fz zKYg#F$-ii3aVo&2)?j8yI(gXE>=1r)x_aA=OKh2p@Z+}&T&u8L3IDk(s?LsFyKeit zPo4mgEADjc>s(~)B2&I2No#D%j~djZzW}PIAz=dPyMIH@VhQ0(*lR9A$4yRpDJ-*r zHmK@xpMbNCsQkne=EPdMIiwnnotU6J`hM<$1!=3yW$%JFVo0pbh^zx1!!B3cOS%0% z7sKqvIgZSZ;K2)Bw9+M(%&*OYjJY)jA#gdnNIY`F5F$su-833$Mu#Q(mP9T80=TeW zACPRhT9nr;@;_}5yC)%Q4G6d1DPAeUk~y0gHD1xqEv%#;<UOo{I%lS6(t%snfXJMi zC*j9<@ohhK>|d2PO#b!(#~Wyws|5R`2eYg3Y-gsqL4EC+GQ@-C`4fo84ok@%{Bv}M z*>ylPBn0jDQqb&-48en;e0ste2egNr^z#VK6n&!gzu|@wnAl7wnK1Z6(irN<ApyVq zLX1u~KDmN$%e_-D3(Z5*Sz(&}#r%*2!jn!nqlj`vzg>zulGu>M@5M~b1(GBC;`2?) zE>D>IP802Yv!q1S9q;hW)i*yrsE_fkbdoVPM0*HFj;0l4*(N9EM4h4HJK+2nyz-!s z00%HU%484Vzs~lG(D0yL+BH-yV(15$5J#o4K7Cby-$BUdZNb}Ex%426#|CphG6zp; zK_PYyl~0n}?;JvT0pJ7HVUP`nit?$l53l{}6BV)9S<q{f>SmN!GKW1aysJWs?#kFA z=F3=E&?s4&0TSOuQ)WjzfIrXH1WLT&guc=1X$wJe<Y3E^TH8(61)2L?!t>sQqfD^T zIlvvv*{^r!57kGH!Ku9rpcbV|(PxCY!v|oSXDgyDr<6C{$1W|$iRnxX%&V@N`$i!u z?}jSD9^qj%%ca@Ibjar$|JYrYF-u%~=fdbL67=PK_<Zg@mX0w6u(^TY4tIT{h9j&< zzhr9EhlqaQxD%n3K%}VX`JWh8?=VERLB23|M-4|=k*XCUt*}%Z9K5$Y!c*Vtzz4jU zT`Hn&q?|V1e>Ww_dFy$gp10tGyQ`RS=YZIt?)qM0Co|t1cu%yo*;ux-wd+ZbZK(k7 zhp0iDCTj^?MU4dl9I8!RZpx1)$MVJB`~;y0D{Z~p9AXAdd)018QFl3pScp&3BuwGm zWU~9Y7$nN!E?WCM(Qz+=aU0<-W?6G<#M%S8qO4N3G6+^%n@*dK5l(!%-{us5gj+f3 z!NjGD@d^d*#O*Tm#?`){SF-5t#|pINM07=+q!=#@i4i3O#2Um}Yb>D~#U>!@&8~@h zN#TOVy47w1LHs((Z@c{a<v0$%1`CGNLbM)`&pZN3`(pTe{OFe1l)iD1^ZaYt8`27< zqNP1#jyCpfK@bGd3Z_(=Z_-NtKKq$oY{@Pj4=uzDnqVK}d#S~$)OIW4DyF>LZ=vZ& z;q%(L-Y*4GRXoG(_BvGjc%T#~y3$D6Ko$<p67jX20^Ol#<)4b}^=f$%iOOR!d+{04 zz4Of1gwdskQ)H)xJMX$nRkNeI{7(pQi1>;h>~m~2?eFX3sRWTU)6w!HGHt%Pnu@sU zy0_OoD#5-WBs5hn%}Jxa2<gh{u6^4+W!a|n^(+MxMPL1%EE~|+8bafYHzcx$@cU*Z z1ev8OZRs5Ds~9>OPQkUF<Sc=R>AB~@5bQEjh>dp`kB)l1S(G7w?z`??<-l9dhoX;d zi%g>Otc2mDGpc74(E@16(YZIXw$qX4H|GRm50M`?m;;5tfpxH8d>++CsmE)GlB8*K z5gmYi5W==~&36?E5Wya!tlsyaIaNZtX)14SF&bau5zOJQq+~ttFymq5`@O?{KoHEA z+<f5?Oya1R8!#{M#8B`{7u`?Z96}lWvPrikcxxt+=*g=S*;m+cx4Q&f=u42%5CS5z z8t1*=wT586sx%69y_bqn;uZBjZ6O{gDF?VPBWOeJNSGH;Z_uJVawUq-jM96wIY2x= zo6Z;PwVY9VOLdybvY^%xD+Wh9e0`sed!bPFUBldU_4S<ZH{W_*8%usp`?XdYD#32y z4c7d@OgSPaO6JqZP;%<T@F5WVM$p0*WyIB02yd<XN4Ixs_jH!dfh1I+x1fW~-Uhg@ zj_>7SW~nrC12vSB<ogG&f3=*61nrmd<wcV8fVAvUd;M!)woE9@S1S2`Xb~@q(=#!9 z`ied4lMyE)gE@71MV~oQ+(c0}5$1Tx_-Vr+ADJPeM!l^F&eOb)-M=TjYUS!u`41}i z%ekcwGt{IR*p(QP1e~a6MD!W@Bm*gfdo5h3;PDQ6v-EIW?m`tm0l2ja{!d|kFU(u( zy+N%xtxHoGsf@(#e0rq+9SVJ4$WYKqev$@!Hjh%L4e>@!{tV_!Xu@8k4fjM2z|qJk z>Du&3ZW=7;=R*Br3w!SF9*>N_Y8<my>dH>Idhz+8$)vfEe6*rVNH@DN9I!L`c2xSn zLAZGF`MycDr7&lvBG{W;fmF%pu&DM%ksAm4gC<-C?V~B7wJ>LO30DNtk}czn1qW_v z!Z3}b0W|EQDA7=>Od0!|R`8Q8cVNh;)K5eKzckw8m$JQ*=?1Bn>rtkah{625JlJl= zQ>Ue}8gT2afjrFPm8QR3?g7{HvgXE}S;9WHP-nQk+iy|w<yQDVGv4@!5R)nT*oK_u zPb%TITLazDakqmN%(KFF_50FE`q+3K=jF@bwgm#+h?6<M?CE?jW=z31&AiyYV74I; z+~zGrlzfyGzC-$(kOCFSAvsY1oH>RP`c@NXQ&LX%QgX~&qLh~KB5+!##%t{D(gBS< zW^BJ%npX&S)7mG<3}0!=Yu|7hMuG9?7)~pTHYfR6HBR{-SJ=WG+}cNtI$PmaroBmR z5wMS$+DE4beies3#OrIc^bdr5X7-Dc_p-v@)<JXf?GL0)pAaMtxHBVDLf>vGZ)`AX zU&_j5%^29M!VPw009XeNJJlR>P{v#l9d++@R;o8nl?69rcWRCB6w_fgnQ3CUl8|QD z@a*A^ZeyZGeXR)L(!C4pQA_q}FlP~?PVh{cj-URBy)aL&_e!;r_hL^8|A-RA4m7sk zDlM{t+Y*p;gZ{TqxpkYMdLmBFX8e+|P5yFhorWL?QZ(5a0^fE~&X2Z8k}1I4Sj|x9 z#2W^E!haV%paXa`+O3TZJLMPu!Q^r<PjYuh;DZsCk|rG^-rtp#cW^J<j=l@>SLb8y z-M9%`%TZBNnyIdAuv*m(-fXq}tgn2P6`_Y-H)YC~jaodn+i<0_GYCaOU$OQw{Wmsl z!(?uVWDhVmFel(lpiAGIe*u#>hY!M0Ze|SDDwXAuoucvo{i!Q^PmKiwpR!t>(pP@e zicotUYSIS}ajCWh^$8E9{n(T|;9f76I5`K*h9dOB^9gsr(_{J-4o<$xgMLWVJNet7 z>5(&vJj=mKYt7&9hbqgevt49|YRZQwL#~Jpy8ilu0LJa9m1d*-?%HGT_Fq;@A(1T* z6pbOBw1wnxQz#sq-6S5Qhjey`6%2|U`oa|wd~b|)QE&FS+T_kZ83@-j%+6KD#h&+k zuHLl%z8ORlJAH^lzHMRMvt^mx_%Roscbf#;qqdHgI{AD?mNNR9IkIct*ZT~2)h5?b zx?B+fdtGV$LDuV29pTjHn2I=}0k&f2`FM_iE4`mY$=YDHxfcJT%uvJ(K^{evZQZ-E zF*2`YghA>FXB1GS?<HcivALu<*5GEp+KUa`PHP|UKPWSH1Ht}Q&YRlPCjj9@eBY$H z=3#dmG#qdqf9B_F+hN}+<?3kE_vDtLg?0c?lyt%6Rq@b#%(Ru-JD%rFv(N%?JQKbd zB#WSCkX~;jqp$aV<7|Kc9CD@h6Wn=g;6M654~8`du6zA<PV#cZc^guR7TAXD=l}3% zZjdkNG?_G2lJ_oYbmz1w*zx|um#r4FA_l(DogZ8O1~$O>`0VkMj@R0VJQ#$+4WxJT z3jN-x*=h+!H3ue@oPzlN$Kq|O{O6z5?1L7UD!-rv>w>K{DMLJU{}otw<(i_K2&FUs zGz<zFN$?)0qU^HKIl^7vl10m>mMuK4OOX6fHZM-@{6Toemf|GTTTTw|txKZ^W<8Rd z%97b0%79+!*_^o>yB6f@+W{PoN^M@>DTGnU=!16T^W}FV1o%(f@ap&jTs_<d3+C@o zDr`H-)S#Hd0_Eu^RgnX}fjLI+b`7KCi%;;yGv4}TSJ{yF^b#$?k-9$7Io<s+8jFMe z2UeTG;zhHQff61VGKLfLR>9QrsM|KW`?`~?2d6%GO`kDXu~}@L0|4wtrqfD<x*xFo z5lo+ur=-ai=B><XlqR4yKcAEy*u0oRGSB+X!L&zq6_tU<U^0m6Ku`Y`Ra9H$-+BrE zdrQI+PiFJq05mM9{}|fgz#~||+(1T`c%@IsgH9%U6h8q|l8;%h()`fjzF!%e<>APP z$PZVeicp{EU;k@h+v8s-cUp0x0=}tDUYbjGqYChZaY^qM5?kG=*(v{%Gq_ab^O@F5 z4sIDivdLpj5<DbEn2cbq=16nzq~IF*Pa3R7RoWx|KWR0a<(4yjK1Q$V870SkPF{{E zaOsddLiP_a-8OXg_ZBERb985tHpVd<$NQ@|mWSt?all6TAEVBt8V>~&^kz~=9NN!> z5Ka`l7lz+fkAvYQ&<>igc*_1f*8#kpTf(mKd}AfQ4~S7Z(z^MC(s!=c$}NBPy>AIF z@Pc2)hEb34`govSJPZe^JG8iZy;KZIgFgxVHlA8PPDJ9t+n^o*S=gzMU#?>fTnzTm z@(Rh2cL4Ya@e+K@SL3Dl`)T6MxFnxp`H^PFsl2J-olFYTOjB%;4m&tDV`ek(M!tWw zgWKEv7Ny`(i*lrx<Ap^-E)<hjy^b<8>_?P(XNJF!rf;d-L%$=^oK||qu)7)66Hu03 zh2M1X`CQ1PiI61S-?J~ClLEmJOFZ3=k1NGB77+j?k@p=Tdhk+&TrnfzPZ*{X4a5%H zCz1Ek|8A`*p!j-J(csFqXpdT3l}<DjyJVka)VsvP*Pw<5*7|&)`PU4Iwz?XURKS%& zVK}{gu0MMipHXxYiEMV4Ng`gQw;e{HJ(eVZ#++3NeP@W1Z**$6X1<x;6`_YHfELV} zHVq7S6Q$Cc<7cL?R}y^fTsxQ`?rs)<Q<)IWAeoCzb(pt+ctAhSJdd*OS^J9_>Lw0* zfT!CWJS-}Pb}*#d+_E)twA7pyDu9UWa8T~d_UM2b-<9!iqE8O<!y*sJhi|M1O-d(% z24O}1jwrdhy{D#>AvYxK6R6*rqbs2o)PO~sZ3RRqk^puvtE8Ky?*+Nae(5aSIq9a* zCtS8HII8a(y=2o|ia%W)ie+e~)eZ=kIpz*zv;Kv&0peiJS{DaanZl`g)F36#n@>ee zyx`u=A^eot06un^O8$eX_ijO@bULFj0&wpzCyFnxJlZW@esiH#2_?LT$&9Y^4B+n# z<IOvtk_Fm4G9n2O19N(A3>lH6ifOd3fj(G2Bp!vIKqLWjVD?=%hZLE@8MTX$MUgQ9 z;ZsM-5C;?ry|Oqp({CN}36z*e1i@d68oTnvAVMnQdimg@D@~#7cI~6a@~rSk^pY6) z$#_$YV-B^0v6azwg-l`yKd)K;0VaezSO>Ew>J=6v@y0y4OpbN$e2U%z+{YrCEq?jx zGLS;=29wI8?G7n42OEu;Hq+}W*+VKFlR_TY)Q&0rGlFXKu~6ho$PLx!yic^a;>pj0 zUCqM^|DSpO*Ww7i^7bGb+#IMMA4?}1ifsnXzu-Nf?^0$?_3;64q?I<j)&EU1#0pPX zH<Nb;$o{u5INd>o@!=ezR7fx<N|P5SEs_(;XWhY=%^^tQR2VQP6|YdbKyDLb2GR%{ zoqfj0Ww_WA^Y<tPzcMAB8i39<qmOu2f)5V9(l}{zD5ovtw?nVrEFG!i1H4dz@wZL> zU}6c>Jsfsepwi+WGE}5s?d(Z9e3hN26m2u7+1n+HQt-7RfYN1aR=_`1t&S4&KS^D) z*sYFI@GqMnZiv<lNoVKGiRunG!6*55_@cboEaeD3Bb}o>cT@dW9ek2{R=k@XH5P0| zz^zN)2=l$p*nS&j`6!1t6;mSv$NpmqjShV_kYoa2(*y}&O4EionyBkKGjs{{^5y%s z?ZncqLQM^qcNtG@d(b2(p&bp?H61(ozVPH8h|;>G)Xa&%O^n;(IPl8Q45$@BuZpA( z3X&r`qqyi!QaRAV-;uD-p$af>%!uP0BVaX4kDu!2!QJt*OI7lJ9QcU6$sZPU@T>BL ziDv-_T_*@Ie9-p(5Hd7F^(bOWk$bPSuCtP#_C9Nsk>&V1!Z_&WnT7smA%&>2iOW`i zcTyTe(=7(Kjga3YJ$`90EJl=y1!m9Z{a<1tNMfH#mI}^6vgosN8Rg{`0T(78ZHR-3 zu&y)C#hdt3BfaDZaTeLgCpUYzJ(%x6)L4KOK1uo;><<NqJ+4d#4V0kK-5Yx1V#;s- zealM=?`*=L>)i7G=KpL5VZASpuL8*f^-}SjgPvx{k1+LZf%}xFl~k!vIE2gj{D?dq zYv$9VUF09~{ul{<_KymiN4tBA%WOy`*cF7p#$Z$b-QDUniGc?4w(-B?J)r=skto~_ zo&wJ(%utC@o8Op|6=9(cH)?dcp(N}YD$1WUF&-f&%GuTB;C-`={Of<Y7xpV#L)H~0 z2~To(8xu2~J4E*vxHCv{L*vUOrg-FFqUzWu>v@^&Gu-M<Maei(6u~ii7Kv`}XgQQN zKQYT%l(itDxmZ~n8wpDlWNScoaJV>|Fks9q6^nIuDpJABijX}`+%-lCE~XWfvLhJ0 z5fDRg$`)#qMBWe^AjJN+;<<X|&Hs%nn#Mw$KEN0{V95;MjF8WXl4GS*xoM5X3E1zZ z!{-QVr25QUa2kn<qMl}|Y4eXZ#w<_p)YF!^nS+t+#Cjw*5y7$Bg@C^kN|er;{pt{T zd&qC6UQpTvucPUK%c`W(LXi>$0HfL!CFW8_$dAHR%@aFpODy41Yv<PUsNAKaVD7Ts zx7mvCI}6RrzENTPXnXG}y!#1V_v^Vd>OS6TW6M@Y>^~rUs4#A_Tee^kO@}?crD9+N zDWY)et`WJ*p&bud15Hszy{6w>H4~yw^^FQi;>o+X|G9*-gfBI``#+Z$tlqXhoE$@? zRiXU^y%n+RCsi_O%#C6m;b;=<fzqM7cDXmSMUu(_X7l1}z35Aq#RF;8O0HfJomj_J zOsjMY!f8zyW|Hj34m;>cB-M5fhf7+gz~vWnDx&o0u1y&M!{kJ%tYEG{z8C)OSvn`9 z9A>=XoYhEi_J0SXvFV`Z`bO44ld)7T{uis1%f~>Z;_pMC6qASA8|l`<TxnQSCS4}7 zx9zdxJ8UhOb6s3!p@yH6m2yu}rE)H^cakcc1-YYdW)jmuBx-!=uRX-dQ3p#gHNVas z^6sxTM^Rq@iY^KbLfgAZ2!6|4kHb0q#7iE8UQ$fje;13q-zl;_XVzJKo9==fEi&9V zb!s`2mWb4vw<~5<+(I>_<FC+Gf0APp%F%kD?eN-cmBf#3a{ZF#fCD-RA#pmpcvULa z+*4yk$&;Ob&u%-%_2aR!D*1jx7<t+oiotyN4u3EUOj2xKsiOs|CHpwPo9toUsapvj z6no`P+th<arb~4QGk@`{XccMRNfynXR|2^jC)UL!YGq(mDWvz$D5{%ha^s*9>!pk1 z@$yE*0&%(=y5KLK1h=ee<)v`wXh3^OkJ>s*oL|=4ko2+NhxyZWyDGb?fy9Jte7Uvz zi`+b*B>c^;5qZ*0Bx8xv+=%L>@f?EuR!|Ms{@feQuJ7Z~E!&@J=~qQKNP^U>=BZH> zLfP9DgGQFu{dgr7FEZ=Z;^+rL^v87@81P&^nd%(bCVkAx2w@Fc_$7qeuUr}I=B=U~ z`KrS8Btqv%M`4lM(}qkJ!1W@(b{gWtkB9_3$m9B7CUekUngMS~A6#Xd<z?RCf$*JC zyUJQ{DsLl}+Nm~ldgpfuVmeLBhYMvS6QffbqayK=ry%vq1~<jT&10YzrwLzu?!b&< zA{%03f<&^hBNc>4C)?-8(T<uk%`q?B!_E}x5>(aRWp2nRkj(64p*y?q7125}AqRlR zBe!ETIZ_Z58$eQ)9$G=dr%?(wr`VQk+LJ0fgRxZ@%!5Ib4~lZi(2ytaISkpzt-k;Z z)O!E|i8j>zkLQ>BKZ9yA^>7Ze^=p?y>i4&L@YPoCd?e%F@2T9qwWDCIX~h|EUfkJN z+y8o9z1Os-jtRe=qKj^9Md7|->;X1IES97KcS>b>c?h!a^M|<l>FmQ#wv{QbVPLSi z`XqSzAflMLF&}xQ+|^cgBa^C1c{EM`-8adpcVvS3%Td{VvO@u#=1fF{M<b{uh+3#h z>u#Z-^prt<xp+KDQGY7V_IvLS&XU`v8S{^t?^fwXhc{BHJhl0Y!bha~aR9hzPe=+O zDWM$Y6BGU3`;W@Gw3_^&EmL^ykyE$t^02c?VBrQdTyB)}Rbln7aZN?;avS^|#3DE7 z8#-?6_syNtXg%n}$$AID@rLHAAbQmVhg9$BnXFO|iL-PqGlSj4vQrG@V(!ql^g&yy zxxa|iLaJ<ZIFA%Jgr)S_jsP-0{{{F@lBH7405WcbUXzmyI`Q+2Tz^K;IyCD-W<k?& zOXJGI9>psTGtP;AOWyH%Td`I$b+AS3s3DhSsZ}u^yS<b!iPJH@Q;iEs14yw3ozYu8 z{@r#keJ}N?ZAy_mvY`!Q9Wi>4Db}^>y0-{>IQULtyveVQtj3t;7{Kv#o$qu<zbNsv zv?Fgj!68v{ORwg|M$~A;ZBZRgv*22J3zpsux0Kk@N%)o|-M-erdvf&i3>l0&n^LP2 z%Nz0b5}T-{6<?8Pzw+U+sJW6oU{R)LRn91xa98J@VNGjBLOP<q&-PaxEAr;qLf%pP zuOtZ6n?Ks$k};4|59pKKv{)<p>s`Im=$CKz`5g3`wOZVH=<!|(YRg1;>vA!s)|BPj ze#}2l9>^9*>Uev<jgS<&P`-%c2YJT+PAmv*n!F&gkd-dEoU4d!+JO{AYm`r-4v_B) zIg$Ks#c=-ir^RGA5-IrTK3J=s|Kv{F>P0{2koK;<=Oy~k6L3E2?M?-{8@%ltxp?l| zb1}|3xxx4C<5@c32kx?yCGU$+y}fn|qb_9V4|2k4iis{h#f(^@qNe!#>m_ui{{;*+ zG1j(uiynl|OSSxZLQaAuSy=0Xb>Gv<n*U~Dg)jcf;|6T?MCg5vmfreE1YFZmdExW& z4+CRWugCyJO$?e+2`Zz*+Mt{}y|Lt|2k)H9Hl351BcWVyTa&ZJ*+L8N%m+<Ll1uwv z`T9E7vZM#n{d>1<g`zGPc!<yQ*w!h_8I}BYp1$v*swElE%!$k1D{=)^8lGo*rS%W$ zbC#VN#(5XkS{v8~W7bUxtoixFt8@d=(lVT_GJ}BSd5x!L{n|ZxZbQ>eaq9S}mFe4@ znR#&#IASzyGR>upOMcx#N8k+WuF+(~h@LVmT8@QS1C~!6ewz7(_@pg)WBPB(lLj~3 z^rlsr@lOWjIfp>Tjg^uWHhIO4ls6MTs6;zjJzK+Od_sa0J?*8gpVjnso7@KTavsyA zCN;oBYQL391=Pf7%|rt_vr~SLIk|k$va>flW1~(P#m28D<Q!EvXxyHutO*Ca%E(e| z;d(_rGAx8zREZ7r3!``KubpWuVgqAgyvV%y_n_PmEf~cKH*a2MWTHZQ&1R2g*o4WK zjPt#PZwu&E3A^T>XmxJCB+}5F==28-k9z|r+xPpW)k7Y?GO7bu1o1;MC$v3AcVPMu zcBUisQ^u)o&qvS3UqskqT&~C;iJ_8Zv7S$@Qoii0U44DZi4^&3Row8ZfTMNT%W!$% zHNREqKF3#sHuAIbc-`_r0RO2>T>iRBC(^d{5B;~ekNNS&ow5kwllru?UNleIy9F<R z#rYe`oA{JuLG}+1#5eofY)PTtySNv<hwuWrB23sFyrHUzpLI%d9Bb5u+>yO+Nz83q z4$k&dYeISDw26`rsI9G}<ih_Z{5;N15&w*`1YQGW-+_iY6y3XQNq*ATr0BsSMz6BQ zNJ|U3Ykszl!bPoX7H2s?%IMz3M0eW-9;?mHuPr{a9OnMmMV|RGoGre)H)!w~H)-A4 z01i%ap@Bo;#PbdZa?1TT=r7${Eatt)$KA%zekK2(7A*9)tdD1aP|R$v&T~04$}~|g zL%Mb8XoOEC>2Llu_B<P|K?!)Fy0*N3mlw6{dsY3)iN4mZuc@%+K(V$}k>jEWFo9fK zlc^6fHw`9YbVOu4-#t1T;&q0;gXaS?D`f7km)PgGk&lCj<S~m#<O;Z^cf&%X(}#>@ zhlps*E5htm3?^82oGx804z^|)!Ds4R?#PhhemZz>*4Hf=HOL%m=1UJ0QZ;xht1!jR zPlY&oGYcn8`4y@1&qAo1-$;ajQ1rc&p7k}KPLIwYT$74IL*`-`c@tWGMy2Nnze%|a zY~hwKUvcliKE!YJ$SO#0zrF)+XSa<WkO5Ke;mC;nhIC2q{8f1(PpJlKg=@2ERWeE3 zP1-ptbhdX6@WlOJCTE<xFy%pO;P2_LC~a=e@A%RKC;<kX-iCzp6`3Qz?03C+7*hW~ znx!Z0QO6#9`|sC#91&}5$u|iyP<D5HS-<a(6KkiU?h6gnJ)IYhwpnsa@zN^(=<R~m zA0;a|LcbFnC1*D|3g7j@@2#)r&syNw)Mn<nieiARK$%*<wYLxJn^oE~JzT3@b|LLe zBgmV<BC3!pbdESk+CR*Iy*3c-2va2lR$e6UNMDv}xynBN|I#UYuB3%tAjPU5K^&iK zi^S_nfXaTG(rXH2C7nRF6UJ*Qb9pf>c-|0i9;i7iMpXU)*pkU-yt(t-72)>N;$`al znfPaizKg(_m;E3zq4rX&<-DJrI=0!XaQ4U%Mis&H#|sq`e*mYsyME%>C6bY`P4$i% zioSGDCHc}Nrs2dF(i3EPAV@$5z7R1-Mq{te=&m)fl@qLC+HGjoUo4=NMYl3|jD0&R zmM+R5YjbWpH<004G((nYZ77b_k-T`LW?N56|9g)W2aOt{wrAcO9F{yO#vEP*Xk9cq zgEhW0y<rH+0?R8G+q(Q7KkG3xBzd>B{4fW1tg{;z`smA@ufNLjX|AelJx8V3*GHw= z5X{T}@xaw=c$1FyA)SLa9BU;-c4bQBbe<bd@*lMB$T7b63&KjVQxAAcTjFjyIH5Dp zdyl!OR-u5Ouij9xr|%)Nm+TWU5$_-^6JjS*q5rm*2{18!*Z-|n{oPVjc+^P2xMm%Y zgt_YcD)3#<CwsT1z4du?{tHq<I#f(<GgJ?ehDPW5ep5_THf6ps`Nepz#MsrF;2arJ zeRR`>uNn36T&0~B3NIB!nE78HlGQLe6sN}FmY|q|t1kSZ94VV*sInu0fNv9bJ%^BT z5kFF{#ejTDq@vhcML7ZHj8CfH;kkBsKJbL3jx%vo9V7RvRe@3M_fLI#U+Q7&-jR%m z&sf{y{oT^bs(<YTGokQiTS5uu*f}84CT0ZM9u8(x9G<Rkn0ixLk}J8U7pOpBJuh>S zMjXMHpg>^voz}5ao_{rgGN$Cn)y|-R!$RGK_ygpVoQeirsZ!R=1<Q?}jzk-XF^y@6 zZDu)dHOzKzvfbb@wDsuHJ(87_kMw7a{?P?C=<K@s_;FO0^Wv^S&ASUxU+M`<}< z$3Q?n+skqOr`Cl1hl+ZSNX&-9`4t6%^>iwA0sIwtiVRd*yRxUHl++6O2@W!~T2wGE z0x-$oo~R0LnX{|NTKh-b7L{h*dhS-^9cLmr^B!x<VH>N44l5g7@D;Y_NOD7IR&RGI z&fXc))&FRN;PnmvSpTPed-H-wf6!D^ZjGf~RlBlXwf0JrZ0=kTjJRF(-p637!pE(X zFAIVpNyb==f%E(9NyIKoG)5TI6=wfmKv;NG2;20h8h$XYi9aa8pD)Tu(dvj;re*FV zDZb72Yh~+o;HJijgK|^}?o#-TBGHKwV<lsJbzPV-2wn0DJA=o`0#n9(jS;z3{`#)c z^4&^|>;$K~(vZ}%^xo1!_-jKUa)$DkO&ln3<lvH@k=90e@>@#MzYRKOhgzKbfsFax z42=^O9VQ8G2G`5Eg*^>hrYY|0_nK;s!rPH;w9N9(a!*q!f`elrr2h1`d!CZ#V!Y<1 z;^zTzDI{0*^JA?*)vbx+GZ>cAXJ__DsFQONWumRJ-@jqgyVMDZIb58+$rhv|KyYYH zjbch*Bg>QRr^{(jb$;)goo0;g2Trt+nW}zX>PnrDFw$P(<$Ab}nU`>3ByL6tOl+u6 z$MGuPoD%;n+w!uT32~_N*%sVIXCIuc3}1fcoAyk**2RB^_A02798rq?Q}w0Wx$x(J zqqZ>v4zE~q$<S)dhz5>7QFDnVgxXPJ5F`^1_CNl?>ta`#o~ZS!I^u1v0xG<eBV+rA zzf$+$F6%bcik330YVoyks>lB&E%{JtU7PV_XZ(~eOgf&P>i>(|+X}6=Bq?PeEEHEX z9}2|5RE_95s6_S?VNNz6_vg)$u7N3PqV&+LkvoK{OHqR1y}`%pNhy9mx3kZWxD3Uh ziP{6vDB`D$4QAV8uCf)2S3ohNxtYFo0+X?wZ7*uRN=u8E|He4rk{_wp=w7^`!8#co z&O3GFitEXp+qL|IX=#e$pa;Lp{RaD<D0isq4MC9hx=&=6j0fcJD>D~dAm!C})P-rO z5UU8mpuyd<PZanhtfg`6fh8@v6bC_%U`lNO#bCc~m#(i_3YEr-2uvpTx>upz8zky- zH9>?Cg<j+hrAF01A<u;Q{CITrdDk^7*=uKH4L@GCW|X)e@UqvYy^brYHIlw80v|HK zNbSmEjE7w(p3h{47s4#S(CM&wCdc+&lW_jK9=ko?uj8Qa>LDk&*htX;>!yqx=&unt zxYe?MmlWDaQF{t61>S2k8qX7t*B}{Pk`m??(E|hycUD-9uY*d$1sLN+IW?4U({wIy z$u>v6peahlxq?vOlrlKJ@nK?Bp#|$}cvw7RgfBf|*)zdD7^OO`J(|pGA7oTk_9Jl{ zB&~~OQN>W-K7mEZ^CpvE;d8X9p7)IS_x)z(!j+vDXsnnLfJZ8kn#=dRI4*IdQW+|% zRo(INOk*+ndjs%+<?3s*bH^smvBAUDIPr_x7|Z?;*UF!lrdVX&Pqv3e@tcW*S$Fk+ zRLY5I2st-5_xKS<Gh%*QFlImFyJ|$XzLZPb`IHjLCLTYd<{!_6r%E#K$_HV|%SB$O z_E=W)T6S8!0)ArONPYhOJnljK5t?acexxZ|inS21^V6TBy+6l8YTrE%dLZTL@WxBu zYfLxm*2CP`EU1AR1rV1LZ>OUD@V(WhxFWqxkoEvDgqv}%I+hJL&k8qDF$3tEPH*OO zL_w4dr%qvCio{8gWbg<Ymz(CxJeT3IDHV(uQds2u0h<)R+%|}29n}OrN2{!iPf;}0 zmgU?V#H9n{4THj6oV?qeMNnvbqxV=xyNs)z?v9JChv{4s8V%YS4c7iRw;ksJ&v!fZ z=5f|u01e02iIjq$ff>I;nj0%Ahd1}+>AYh|$U?t$iHkGMB@JTm&-kZAFM?zE#JsAu zZ)<;*0$7d<z2P2iiAKLh*OP>E8oQMcaB*G{>nXj&1;n{1L9eD$qL+oCSc{LeFUZvW zK{AYkBV3B_Le5^^g{C=IhM#FIDC}gjWS@Wd5cICXySO+SC<S5(-`=nhN^ikHsR{D^ zgx`jE=CVdg{)I2*@uS@vB#i5#Nf5fBf>=hU02EbYB-`<4szK~)^6R5&U-rh@*K&Eq zf+1+4YBOSM#Q^p#lG88u<c*f+(rxE~p7N&6%F~IQVjRao=Q*j6!%-}Hr*#)-H1MR0 zVr~$B1T@X5I5^t7iC8o$JjjGy(AMP(6!z>%4(3N9Nl(*YFFY%4u)F{8DA0G7(wcf7 z0%BLcZj@BLI0(B6T3M`e<A{%(Q_chsPLGWtqjPw0<TG&*RlI+VOT_SsEOpQCb-ueh zIo(zP>+cR%&YmBXlg<WTI$Sl96>vsWQ!hvR57LmIZrYz=D~U{Wv&8m$MB{$9esdd3 zMd_nclV!!qk_ks&|K|_RC^#mclq4xu0NR%z2Gl$aQTP-vMvtxk0^Y;j%2|K#m#0LC zv6{J~jOG4mztLFzhXzygvKW8KEKfaNk?wM_DcyiYFxP!sK)f!#=4F;SoEe?hI7EdU zdmYiE$PfG*B&q~^_E_T}eH+ccq1k9Fi_3;7YA|tS2s+Hr2_E=4&c2rOZw8lHz`}4D zXQ+tvTF61by4OT}w-uz)9QEzp_s<N3?PpXl$nbX3a#q}F<uMyqN26acGTRR8$_MuN zorwjaH3!R>q09ujt?#G}O!y2hh^n7hXHk5MGp9H2%EkCCYjS4pM`iR7utjZajVLw_ z90V1)6irUT)o#=mDg^1G9W2;ufvTLojr<|!B=!Op|MO4^OnMO$ocEA*7;o6cau24k ze2%K-ilu+zUMl9BOJ0pzQ#Gm~*e+;woT5<!z8WcgL4}PedZ?!zSM~|wtJ7wun2RvP zmc5cTBZulI7#_%TJ;{Z-z+Pf)RWo7nNvU!l=R<idN)Rl+O;B$pvI)Nh7|yKsxSnIi z-JLERG?|3_*c=O1PMcUKh>1uONWT+fFl7GyBezSfsps!3SYMd`W0TsL_8Z?7&JIy^ zq*!}Cc;a@?Z9P>8(j+YmVUD5twR#fMaQ>^Tw_(6<6_w4+M|7vQlD>||(WB&(No8#% zOJbgRABy^z)-L&Be#A>vKnzw9W2a)~*NK|;hl2$~8nS?~<MZ7giHAS`f9Xr>c)!y+ z{+q`d<NOoi%2U)Emt5!a&wy_6kYd9hRjc|dx~VK}%?>)56GNAu+aXhv^}e(wHqSei zPH1t`jfT^kZDqkQ1=Kl!a6W6vW%jSHi9%lSDtK23#ti1L14%(|UNcDrHLC3uc<<?{ z_TGIYOn7@T^uKD0q1CEO1w>Y<kR!jdt86X}se6=^9h8oM=xrnd)Q8H%ezc@Vd{G!M zT{=3N4bT=%Ju57n+g9ODT>cK~iD{0BR!dXm3oIozcMM8eE;G&hlM>y1Qwcrrle>#y z&>&m|2#!-*2h3E)!kGw=-O1#t%7=3Qnz=ezN#R5~SE-s$|1xjQ16#Zj&Bz_Jt}v>o zs1r;iwkD-9#{aBSw=J<qjQdFiE%K7XMGidGdR>ytOw`SvlV<q$zZ@MxeY}4x34m#M zVr>*ZuyZ@d6#8r%r}Ux@g$65K8U=EdqkGj>FmFoyfw&)PM3hqyHLg!!Wg1*WD$&o> z(y&jbhl@4L-@?{4WQCjA!GDT=l#X@xL>nZAyqOA>+2kHU%D-$-{Mq}x-u5Z#CQJPm zS9Lx0k)_Z5$Nj{`O0@Fu3ka@Y_2sy1Bt!Ad$UV#=&Epz4&Mr8E-!fOur1Bt8q_@eE zvRju70NTc0nsIe6c089hth2mjvuswX-&)=;&w`#0^1KobzB1bg%EJt`3zGDC9`2~* z%LLPIWX0iLpr!8(j>l$vbz}4lsa9pUOO8hmxq1AUH4i)gK8x;*cyJ+Pu>N<uPCoOP zJ6ENQ;8)Z)co>mgSm}?@qSoBnp}%#sI#xD4oPg&yCZNLDl$6w?tVO11q7+p9yx;;R z6_V#~<Vb8Ci_EJgq(_30{8BN+e@&^)Q+0Q-zepqlG=DqMT=1DB>O6{Ezct(YA>FxA z2W>IoH=X=w83LDg*at5W@Me?WEFt%qM$P(f<Y*Hy8fqyTy;4fTzHiyHB57~LYt&Vq zF%ZmIrqeA@u#_NO(1e=|Eg)<*w94z!DJ6|U8;K`<<Z|&EYE(CFa_1p~QhF59Vvp-C zL<y&+Cgm(&4~ID7KeW=;#zXpiQFtN07uj*J?RFi~Y+MCxw7Qg2j|;<0AT;Io>$p1E znQXX@!u#v!OAN5?^*+iv?l*mL=Yx-*1;|`P-Q!(d=JCBqZS0-wMQ)czyllm;lJ{%j z?l{a)hhUlOrK=PFh;wGESl4+xqZT<#TWNpVN=HPZ&*rR)S07_=D{?w#pP(R2vpHc- z*{)HD{b`s<Kfrd>U*uMy@JT|L=eLFc)nhBOGTjTg&CSd`K)BIIjm9_tMLJg=57@m@ z6TO^F8$q-O7OIzS$gd*GlxNMAmbr032}v`WDt%DsL6VfLV87aqLwlMEIKlq+XuHCa z`shoI;^HDFHuy$m>tV66j!%a?{2iKp(5<oHF^k~gbLQw+6i|Dd?7SDj?<}9%6$!MP zgsu+<ont5d%9rUWXE}~tKMM!o5|iAs%`Hzbq=cL}eg5iA5CVmC3an97e7_A;t%dM$ z!MKMSsu6@T<0Ahmh=2SrAVcI-ebYxCkvv@!LX$wV;41ZZl{-PnPqRT<Z`RE4d*05f zZne;DYqbEfl+I(m|9!;1>)h^-4B6Ho{!!CPA4aVf_95f^7QG`)rw1G*1y3NY(?|OB ze^H9O^q|x-yRc7`T4n2a|F&RHaM8QwxpX=xz_qQ?Ht|h;?pDGG4_((-@LTDRT`E<N zaf#cHcR=!TbYuO4jx?S&PsjtJ&AG5~{YiXJ_&Y30eBIm%QJ5v88I9ET2U8<y2J+XG zw*WAkquSs5KkicU`wzgouqLOvPo;lCKx&^2wTM8yv%myI=lJKiwTIW}rpwelX>3j= z*H(j%7ZoEH0s+=lTyDM`l%rc7*f&x5B3vc%vACcJ>`}@=Ph{K|O!o**nf7oA8qavV z8u<(qkM=jIux5#S8n);7SU!@-nT+M2kW<B<x3s-izh;zk>Mntpc3Bknubm=9(Tv=s z%J+>))Q4$IN#&1H?>Ft(i#Il(^(Fe=g^kYhoXE{|A!@XsNn1;KL1V2v`#L)b$O?p> z^a~4*+^>2C%8BhKgUQ721?yW^io7p(A0O!}cpWQgE1}O3;mwg}FGXWE`Ixmb2iybg z`RJo8>lp=%oi_jr`b=u;>u7IX>v+4MJZ}1dL8S7h#)>1^_^A)NntP(VxQ;p!`N*ZO zKZN4m-|uDLNeXu6Q!b8m3&QCaAPW8Pl?5mq1xz|xpZ3mYnPrH=UG=Z-1~h_7Pw0d~ z2lwdK&<b4DRH)s7Ca!0p*%T!>ku<J49#3yGah?1(n*?CDHF%2SGjhG$fg4Sw?yoxx z#x|kxFjS^~n1K%hys`;J{~W_s&UYQbb>Y^B_UX5b#&>xy%n9$RkjpjPcR(bJ3g@Ou zp!cdgh#|B28i$Z}SjejNT062!Cye*Ov#y7mm86e-Vvu=8nWb;_J9f(UpU`2g_=jBf zx)17o>V5zw>JQTDuf!7DZSj~qf*%sNXK^hPV`PTY3}Izuf$9l9qs?MMeN|j7COcyh zVQFqx1G>ztB4OW-SXmAJo{Q)gIpL)$`7fz$C~0$xQDMV(gdbeYBn(Q-zEHEWU*v;I zH8B31cXBDU^wib&6&kGm{gmbd`}Zif`Z_z=_H+@5P<%i#AVEVip0%h?Z(qDEn{*w; zQY{N63(T&MNyVtM4af9fkg^b;dbU(X(8kO_6f-WT`7K3N^FmODQKz}~AT4y`!y_+) zr;U7N#{|9;H@1OgcrQN=g3qxl<8Lbc)xIqHtAt`B#|^8)YrHY<dDHnfBzN5?o-ExH zYWfu5{TGqORew7IE`I(a%N^T3aN_&~jL*iJU`;F|DX+DK@YW{+;w$qHtKiBl{S!fj zF55yDNL_9ZzY6J^V2R?|MQpAMyP8w`0_QA^f+D0-z&4drcI}F2C#ZGa6ZX(|c1Xdx zpG5Q(t_SsW>YXP2fXA5$QrH(g6jhk)N{tFILtkBrY~CbkdSjp*CTS|I`}^`_y(45F zpYNeC-{>gtu+VeKQ>2=gdb*b|-iEnnX>(X6<g6QK?Mc|iHNwnbLng4Mzv}&W_6+;f ziE%k<A#41fK2aiETM9h29%`y-^ak&0s@YZYyF~*sY&{h4t7jEC`j?IhBW6yWW;Fm$ zmllg$4uLgRb<6<@{YCFcSAn(Xhv_~d&`+UkmN3jop$*)dDR(7`0Ws#<(nd}qyGl7@ zMyt8Mux(QeI@ZSh&MveN2xp(uG(iW{W+n9Jt(h;2+l92E*#Z!dq7WDmF#mf^OIQc2 zZqe$(Li|(JV%h&~2mYTOg8$Pc)jwUHBy$#qP)$ln!VkoMVcNJpP@W7Y++VjmYp$`= zSi1M0a_HSuBsTwVn4i!XU%jxyAQ4twzdT53K?gDt(%@v3%UrGFCRrvqEEP{^`hPcT zo%T;u%$7<>_k_nq&pbc?MuWZ>Mp*teif{=-)#<{ihCR0$^WNd7goBGeqd`dGK9a`h zMkD|1|7fN&;IK21N3CRcj0a`wONc>eE4p3w6@_QB<D}W{hk0KYM$Ou4mmIfu)0Vw_ zVCfE~N?_yIS+u5B1YM(fA^+j>buW+eDwHY&b||Xqf3}BXu-^dgR(UEoej0i$*%pgB zW#s&{%c_5LEl%QRX17XPbV8LQ!X`}kmAse@LkB6h*)g!nQ}(a7>JoE;o6C|@1*04c zs6VHxnus=Bu&E(!fR;OsPIDH9Lp1`GqfXvB1=5T+1b<FKci>G;S7Eg;f@i<i)6r!% z;(eDt_MF?xMG~-#itf?=3fy8I#ZL;lt%DP>-ni?$_9#8CPL$(|d7LT|IVavScu3L4 z#5#F0m45V+kg!LhB=MPW6HF9hx?@J_X<wa58gp~)HQv4^?iFK0UvqvQyq>3U1s(!g z7r8jWxoZNm#dPix8@DCUSSMmWFBj`58w9la#>?w{6~I!>xhzi-e$M%`FGW-&+DwyU zJhy$p|KaPeqoQiR_i=pa9zw|(N>C7#j-doZ2?;?d1(A}FP6=TM2_+Q?2_*#y0YO5# z8|ji5x{(G6{oZGMKhNv={PFv(#X4(r?zv;{YhU}?`<wy3x%n>mpL;*IE804I&nbH& z9FgNS7PVTREYaUCxO(f|;g@1cRD<83`XKEh`D=s!7nyR>1fn)<qO|m!?QG*yNlv!b z3GBf3XenaZR@Z*%d_U-Tbi?PlLuJ@z3I9&X3Kw&^$$GEsbF_Eb?_b>DE248{Q3G&} zqqU-$yOKeZT}!U|XS=AiqC=zi@HT?N-jjaT@E-sT&V#pIx+ok*BbnoVucV(+#3)TM z2A?s$k_=S;NHcMHZ>op?*#~mj>vtpPQuLnJ?2H=8iBz86L2ICgpPKB37-Y-{N35D} zyQEw-z4B@zs|L+E<aqyue%lL+vYbbfZR~!|X~PQn+lL}tV$qo5-quTzIr7V|^A$GV zsT_|PO#fV3Ccd&R@0YcHuN*P;=F<-m9mNCWmKIu$x?s1Bul9`4aiw<hR)Q42VBS5a znS)8CHH-Ryvnf9U<Fray7+L*XXscgPt#KNQ(doc&lGb;$NQM!&OI!_o9wO#BO48-h zqn@n1!Ih<F6|QcHOl6qpoa-T~dNFR6Iy1d>hNpk*U+@N4b$#1UMNFuA|7m?xaYOXM zhVFLnAx~kp*EeUk{SnkA&EV1($Agwf2r|9GI!8C%(r>N;TlCj&Zys3$rpNba^{aeb zrIZElQ2Brx(_j?iiy}wbcXz*Ol{o4Mw>+rG4I8*-IIQPQ_xWkMFqxhppeEBE(<4!k z1??5O&rhdrF{|nx7}s^4kS9%6Z;E%7XGlB}?P1Qr$zr}jy&|dM&-rlity=iIedVe6 zBnB5iOglUfG3l4*h#G31QB=VA9Peyg#Nbw-QR#w?IEKkiwDm!~TZkb>VS#TOq=w<q zb?du`KSmPPgQK;?FaD^Xxzahko%#U(ty}7<Km2;HWiIA`d-}BT-eZ4Bq;3CbpiV8! z3YN&hgeL;)VbsIvTiLkrvFj^gqTuc`Bj5DPs6~-%7=3*Ub%Z||W-dGr#^>tJI=J`{ z-PD5r3;Y*u_ALz@KEE(90T=})FoY)f{53f2>Mr;n0*#l+xP~x#B@sd}Ncb~uMc=rO z+9MkZdf^2kK0mT#8VLe$s7NbvFbE_hN5HZP-$oeux>^4Je;hqD0>ge@>YvY7!(WCp zbvP`An9<N%a$QrG$bo;y2{G8BI-oM(c!sK%&%QstD)6B|+)2}cV9pN(88Q@a4%o4| z|H>SSD|t4q3MdA#c4qjaz6R|<f(sK<^zUxYrV?2B-_K3KedtFAPI3L=WkKF7EdRB2 ze{Hq$Kg7Oon(arI3XCLA)(08sdZ{AW+KcrtI;$Da&8sw#M1>pjuU?qFSWv|8^%Gvk zgnM~78uhd^t54c=ha4?!T)B7kFP2?|*WN8%JBeAp_3g*@gXwD*T%KPXxp|WDLHWb; zrG~xQ&zURbX^Xt9<LI!*=tM<XTDPe4gX~i&ha1R*Kwk&xl&s+EDD#SE?Y1Jx>Rh`@ z^i`#EKYl&#^!sA+^eskzYhKZPE7-C5&YWq{a=`vwv?G00*%DK%r)7fC>cQK(Fh$;< z)8R8r*^ezI7Me?T*;l(*k~4+7$Wxxl$WvP>5m`^RsBl%>W7<LQJPAR6dgd|t)4UEm zkEV!<+%OlO$r&n<og(>GBc2t{OrZ&Sd!cvVOQbwMj6b8!RNthSxo!7wq816B0lT(l zEfRk3ySu}*N3X@A#q{0Bp*QBdSZBJl&JV}qkKa|=G>xR7j}LF2?`hrWbZNF@JxZUM zoz4rKcD=Xlj21{h)7417E%i9w?GArf{AW$zeAY72wenYf<zjHTO&eSl?b`n+WV~RD zT=6&g?G$z{7v$!fUt3G@Rd<8=<7fn@JPQ~JE;_`{tw+=y;x0vgE8Jh+*DJU}Av?)* z{@z-REAYd5eud??oJSL?8WiHUL*3M@mcl2p_AF`+&x(NDMgO1P<@{DqQalzn4D<(y zEaB0rHnY@jY4mS#!DrWINbSB;katA|hw}K@Nkkq!x)z=@y!&)rA4kn9mbT1)LDJ?S zCcyorIz#0iO$iU((WCD^8<hibh-em&rZI#SY2Kzy6pnZjFsH|6TV@KeWs`pUj(C$W z@p_6W^aTWV(Bx>sDOPo`0M!xpc7N!6iUoN~MU?K8le$^exFtQ3!<c9cr`Uvuv-VYU zzD}dhsLM=FZ>YbZ`TDqj(4CW_z{ML5zZ#D1L+-Xt8WhOr9j?(_jw`cKpozxk#8Hu> ziGJY~Y8Nea_9D-Z)75>Z0(_SG$vRpEH()4)GxR1Vbd0(vP|>srUZgNe<4{*Es1moe z(*4ra?Sg|+s!OzocN}Nkb!kqaA0~5~oU8W3<$EgArFu6_6V5rldHy7M9IfU3)<J10 z#mUQQ^nz5+R~b(mZKDShcLr?gDmXZ54u=PAqFQgSepNb`-!<r|v5iy$|4>J}AkS-R z;<@G<Gk?_Vmuq-!9-iHMycZp~Kk=|#&C71;B3Dfr-<=pEgU6dHg#|BrGe=wX)fvJz zRi{Qh;<rpa>LM+d2RbUff9P~kE!MHxcAS5=wHm}DQVmn;%5MC9g-($>z|o$dam*z= zO+@U_cJE`PWqr7=rv<|HbIBkh`ZEwW_(>pNk?BDBs%?ZzreYo_Vzbp>l!vD5lX$rP zDA(<qcaXKm{3J;K;)B3qP~~JZ2nUF}CFAJT12LrsiK#0TtPsPu&ywq98seBW(mDox z?)Bppp+S81<DDpx;G4*~WccfPSPR#>R`pR(R_%O1S2zNV-mx%p{9#z?vkb0ZK4oo3 zTdDTVmQ|XMs>PD{9sxy@Deks9AanQPMr6_g;*BTQMC4!}{qwc$%j4qWJ~rBqA5N%= z_109xn9WZfi1+rqDr=-5Y)V&mIRBk*CHtsuhJV6GJf)Y^D1~BxRSK~@v8U?O(?l)S zyDC^$-ztIbxoA0`%y*~6N#pV6I4b*PuWfP@WZ>IjQ=_O7r_Ywts!z6<K}CD*!SKy< zhsN^w?~2FfLBZQT-^DlTJuZIUF3`NDohea5(MugHN+}*^*6v`!q5V`>B4<)#X{4A; zq@Sm1W3I;m7P{4?-VB9^0vrmFe4`;o0ZlY(J&KTF`pOFdkzKMEI3~z`hDJYu-U?D; z1<RviJq^o7IiF3ECZmsPCRGv%0(9?*C;!kfjm)VWHxkQm5c_=h(f+Z#P;PdNP#St5 zgX3J<CC5h8?sUs6IzypdFeM@IH|kf8!4}~G)ep93$0T|<&MO<WlHSFPu4SrbacT`{ z#2fK1T_14G>?>OX1)iH+5C7?YT<Seqj#j?-&il*vXS^e;ao+fuu&dFCOgYnZ2DTvg zEyOTL)1NnR?-eQE;m>Su;Wj2!!@XaBk?Se>eb?Bllg{EfA!CG<O?N9u6K+}_MXZN2 zGU&VeU)86}qQAdU@H~L0h(sGlCpkw@8{Myy%XSZZ*LR~<B}EWVp^HzGV13#(;}vcu z@hxI4xr<Z;x3oSB-onuW5`hXxgrpI$cK!ygR?&t!e>!*MJ->_Ju=@kK7rX|!R~h79 z3%6GCaNa7vi}_xIWLG=mZs5><tHRHL@qkgF005&j!KiMd6tw)`HS_+i8J*D)WJ1s? zHf4J#JnejR4VU8QY+bW7XWg|_r(5=N8IPRtnEVJ+{ZE;kKbR5BTF!O`zx)T$iCKmg zZ_wHX_$Kd=#9yM=ywfNd@Cp6pU851;YD@)DoZ7&fr>ac(?*m2Pfy_mO(=X9AcsBJ+ zN+Q9c#t}ePjPxanD(mI)+7x}%5FX*4&Tr`CNyf9b;up`vv6f@1C=@(;mnkqDC!#M& zWL@M(y8c$5Xb2_>PW9A}37je?P4sE>4{d`X<4t5v11V4U{iiI(cw;~u6yexHA}e^L zNPgtLok?Jei&ul<gGRK$h~_M_zJhn9357o1NWD))<#$f{+_L<JT?zd_9qokdA?bR; zA^<38nt2{SiUO0s{OpNFLb4S<iV-c752UAn<XfpD8Ymp+fn*RbZKb&P;b|D+TH1Q` zeruhc#>D<te%x8~1=&Rg^R0prT`SqKNah=e->uYdq|VSU<m2A+t8i#O4tZ##<DMaT zT%|+n<Bq)F=8L%#wxRa~PmVBJB3+PekUhH6Q}+EqTZa-3<K#1wql1pT-0ST{HwsS& zMor_MPi97{Vj^@a@pJtkC+oO|@=PD~yxT~dkGe@)@pC|19<F2eDImzhOY1h($$N9c zt0^~$q`1+f{;-RQjQFWAZty8hS7L5`hoDm?0#c!@r(_qeeH|p@{@qmUD~;fFFyXhG zT^4)Bog1xJOWpTEW6SSK>PrqLg$sSnKrgCWsb9#vIUIXM|0kikx%H)sd0)+fU<7hF zny`yf5jdoNke=c$B_!QVfhKkvq~`uIo-K_QFSXS(vMp_Dba^7{@Vw;t4==|Tvte1= zK~i@QALjcwTz|eiPPNNBp}eg>R7_ccW6vgD;ol5pRaX1x9c_b2WA<c=isH#LV~LB0 z?PGY!FfMQq4MX|4XLS@xHA(kgX7JabN>Xt+F`rZwa6RvQ4Z<HO$05mg9++Zx#6>4N z-ZDd_>CotfFw^`Fl_k}})T&+}AW`^wnUt==TIJ$3mquBxQ=(}<aWJhzJpzENI!)9e z`i{22v~f_9QFU?XT?T&3S9jc4H%b8CACMU0=m8e{yh5c{<b!)8+DU7EaX5}w|6;a` z9`cqLj7&WOS04sx&}-jF>CpC-h@pRa6UHDW2|4M9>8|M`vg!3RTQ+yKNICY0g2Q4L z&5ce$YR|=;cK2>=gb$^EV!MH2hyTc{;D|LKUVuqNBNpULO&QrjeB0$uwCr97E;^;e z*P<RNQ-{2rdI9fU)t5hhP_b+JZ{ZN13!fp2KqspR@APBB#SZho(4^w6fSvbM1~hYi zYP?@a{8-sC_j+v+DS()z$`e+;i<O~4rs3S=&M>CN%gX85Hb9chhPD<d<Z;%nC^{c( zW2zJX_UN8_IP}_k^?xwr8kh?H9;w{3qoq%_8s&S*XZIb^_tS50(r1F>3ZI+vqkYe< znGS+KR~P&~8T?<Je>;SZRVeJAGC!sR<z(GbzIQt9BmL0zeAu0ShiOBGH4}Xn_#FLX z!mz~sXS?F%Q7@UzpXs*ZKc~B=nU)Q$CRUouf%5$hl&?Y;xy`d0d1^dJ`Sz&rSKLGH z{1v`vkIAEdm9N$Rl&>tLeDD2N`7-{ie0`~W4~HHM4O%hj%KWJDoR>(7P4blWVgLQe zn{~!u%k*?Z^{jjHE4IG>PkG;}GWr_*mH%f)2!GQ2Y|hFPmju@<=*oDmjC4KAn$n~$ zkyYpW>i?<kr6@1lonnlJs{1C5CDwncd-sl2&FZ~Zh2p;_$ev#9xu%u(_IL8{T#6r} zH~tm9?}XNB58voCsi!azb|b#3F86qC{xYfTTVvPt@J_sdP{us4G%L0(J4G}7xz6$| zZTY=tUDBtjqqw7|AGdxdC4Q><c~GQqv>6?7yNlY4^IU#NBC&ZYPBqcs^LmgIb5;<o zG^1|xckX*_V#bPjwlNfn7a~XG92@&n;uB=ND}H)ynf35)yf&fSNTv7YL@d);8VB#3 zt5gJY)ggbxmeSOf8C*RzzfL}i4pb8nrZrE0hlwUJ$9;$GFy#n8HRhhs5o&;Yz3!k> z=2RK`T;TqL;A%4G;$w=~6ON^*z&;h`az7*+Q9zwhgFHMMZvi512Yt(-dWMp`c7JBM zNS}qGM*z<-Nxw+a2!D7g#LbdG_vZBG_-k3{rQu1rPQ%+Spg*w+D2`LCVHR|(i-ZxX zG`XH%YHyd87~~Q(xlZ|JU%3-vpPF<tA`P*!6rSg2k5$ed0kgJxtAtXnGw@$Eo3yhu z+_x-~>X{Nr;2@V35keij7|9Gm!uUr|C^k|NHr+MD6Qp)JwCsxTA5%Z7K9dgJ_{Qr= zsag586J2>LQVmbxxORC|keU<sCEM{jEt1Cn78^B`E<d^{Qjp73-MKU-&rj1KtaRDx z7EZLCI)egr_%e_5FN<I9+Ad|0&!F~W!{b5>j2MRN_kT^gr^e0WI<N*ftlb(m7j(DL zQngB>)&GXb1>}j}jZ{i#c98x}(0KDbk#j`uFj=0RCigne$BU<kXDnP(CxC2%>t6ra zH8f+1xVx@TOoelc>g<3N9tykUM+}|t%GXky*W{tbL^X1p6AdO~{yW@;vj%DU42MFC z(F}LoW63UOXX3y4cuJ8@1IjKuFFzLI-(CbnGIErCct@g3H)8Hhq$;5aWs2}tw1QaT zE)b^aE3hPb67Ke?Ikw~N`bj&2a!L4VEQP0edqzILB+5qT2~2v}?XFG^y4qMpO^V)W zVzvF^D>jiO-PE!kJayF9p-&`ckDA~6B_3YEo0UUR!H+~k9pADL%?c5RFn@ChIX{VN znT+92oYR+m9}!z#6kmpByYF-)bF)ZUxPhHQ8E*h905YdhnXlO?Hel8lU$;8%;SKe5 zaHa-Z1Ozgrw!%gKEAKQFY=%;g#dBWE14q+8ZT^ZOvBA9YiT?)-FGT+y;x~njxjvp$ zJrllI5ebkYFoa}NFeFRS|L9U%D+<KW(FmT{`>B}R>u;Xu^N%HX+f&iX6hD&cWkK$> zC=g0+u$pSM(bW?;`eO?996|Sp?F~?3E+14j?J<||=ohF*$oOg>+_3V$Do56bTME1W zYBH6@6tMu8o#l}uOPLzY<`cJiEl=irwiZN}reDC!dlCIg(009n+K-S9M+8P8hu6pL z9QaS22ootKq|j}KF){YBr4(4CniS$|k=x>c4iDIZ*2@1hwV@RSeSRnopOB+Gp+ODi z=J4-58KUZX1`L4*j*%bzZF^11VhZPw5012$pb?LTT!!sSf#6y5&1&XIbiCA2i(#4J zFdKiBD0A}H-1h=2={2jl8#qH&?ozlw)uj>wu+-k*b@WRlABtuvKXq^4Rb{(L!0$*@ z>&KTGHqWF$-v@Q99$Bf=Uu*E^6LOXJGOt;=S&<YA)h2A@)i@?{3{-?Kv=;uiWfLoP zhWti<0kqHy`AG8`VzbR(7boj!iwJCSKo>sfe>*M;8nJCKWf;43Uox4q!>hREZ*lz- zMmPc!fRV%S>i=sofl@;9ktP@eV?CS17b8DvTb8%B7=l(9e?8guoZB5~q=v7s?Atp? zpVgLkH}Av*<e*)&`&y>C@+J_hwQYhD!k<DaUUPjA@uZgQPt?#?#Y-_?d9l&y)!&iv z({7}Qq|8s<_`+DG4b6p<dZ+{7*CJAXn~<-)AfMiFjMv>B6E;TQ7i19tOhVuaVPnQG zR%D9)mu|ks1WhFUx1T{(Tqb9~3Z=}pe$^&~^p>D^%qz*1@UN;V#}!@bCjRi;Vegoe zH7HFnWqLs0Gb|#eArjo+XoE4!VY${nGETYMId79S;DLxK-N<PDwW}o<f&>DK20_oZ z`fGpzOI(diaW6v|08z9>xT2hf$L~5#*0N`D_2t{Cm+;>EIvGsK4Pn_H#f=IreCp_x z<x5ux(n`e{9SMMNswkANNH3FgjBTVfTB)TEUBNJ1k|Z`_NA=;j!k8iXPr+RYcg^hc zht9I``9w2+B$9T^@?xCaTyWeb({5cmQ|rK<UR;cSgruUss4)dTx+b6rkaGTCYs{?| zDRwe>$n%dlR#$QohobSS-cAtA0m=bA#4&2nXZ#;VoUGK5Z_Ptc_vY%!yr|p2-4~8} z?k5pwP_BYo((Hc<eiL}DtReaogd5~3`vQ%LAX>zG^)-;?suzZ!rmxAlk?rE?Fcmwc zt&1_D9Smcq1jL3-RdVd^?HrdWtI?_So-ZyDU$()g<;^#y48MRNIs}^;!#nhofv5v< zFPr&Ld910K%&S<5METb74%Ow)_u5TD(RrK&{`eOd@LEwksPKNi1`~4d8auagkUay( z6Y}alPyUPX&)Ne*UcCB(7-(3{y>}Lm6J9=PXQ(HzXYLa=$GbLwHeK^K|7NeS7G?a! zCXxJeK;GE3s8gl|p4`wTovV7YL0jG?lxaLGmi(Ud<e7O-LYJ(rpoVbVsCpWpjH}G( zl*5q)uZFp8<d`MZlTG&xU)u&u*@W08tj1bAx^rS%u@m8eGd;GWnD~`!vTv9d192(T z8S@AF!(}EqaRQ_G3JjTSx4)`#-wg-(?Hd6GSiuhu14I3_f<6MH?2pF}LrP)vJ;}VS z!*2U>D7}rdF(J4cOuK-S8R?0kJjR2P;5N}24jP*TGrPskUhfha^@Yh!M$9v~8{;FS zN?DR?{1i*GIS6BpJz4H9p`m+uyS>KTtLrGDW7rLBj(ZMct;af3fz%F<_3CrrObiEA zFU@hiM79LcG1wU<W1WV6d6uuIz5vdZ%@=8VQ8}lMB05tpfL^4A;K|h|w7vZIFW?R| zyy4P+^X+oNM&gygs&BHeODln=pO<T?-C9lZUlgBsq@hoZ+6jE#2WsXMpJGx5s};tS zgc}+txAD%fuDnI!yv@-<S)EGndkbMS#CJkO?T|S$qkw)PJMjG`Yah{mzf40K<q964 z1K^HZY4$4|S<rBw`~ta02|L@#^+Ah#Ll+)j3*w)w6sYz7JzAgOUCY0ecHimG)gz)% zG>$1&ax}vPd*#XhQSirKTCocLl2&<yiqWgyWaVdw8&a1<+muYMXUd+u-0!etk^Z@U z=anzwVeRhgn&`UNmBZyu!O=q5sTt3`S!~xjM#Z%9IfpP>{A~H>?FXpgP`f05m%F3; zKhe>w<G&9wgGTRf@Sz{-?rcSjd)p*?s#rH&XzK{c<nnTS^O;-tc=9|ltWQ)@c^-b} zq#+jfWfZ^EnQBebyb;Igfh<bA(aD_t-7m$g_vfn`eVZwlYc{Mr1SO8;p6_<AE|k<Q z+-0|W>Tt~Wba3D>aJwYCH~qb0UgU7eRFe4nk_VOVjt1$|qbjD+ZAZ?b)jo%pedB&N zf7v=~DyLuj5VfoIp2PmsD&cJ9$VilkfIlf?ykh0aAd;?Hn(?BKhvd7h3Fuy&@U8!- zb#KDG+f$5p&aPIiGT|v&ko+sx_h8)9o-LyY^d<rR>nhNo-rRV<$;4_O;rm_WBRZzx zyV{}aV{ej=vmZ4~P!`Ys)13aNH*J((Qmmf}?v4MUi+UI8RL5<atT8fm<b_H<jU3CP z{#x)y`(C`e9&_ixP10Md8_9;K%H9(i;*3WD7c{o2oAdQsK(1g7yT~3b?T-oVm704| z9eTUPI&Y`x82y{muqkFHVe`(bah3|Vq#g6?d@=342W+ebNP{PY3Cblu7}fAEG~B{+ z?^-w)1J1LAmyWlNm|wSixL&Q?UGzw*R7PBx#A>TD?TPBZxcQA|RNp?CF+^wT1mj2p zxw#FKhGFF<Xm3-H3rmr+pm4Xxh$w#$$cU7aqgT@2VN!`!aJ;Y~n+v3W>bS{%J+)Vw zlBjkj)vmeEkGxfUP<Sg5gosaEMpfg0*U)A_SB;6`k$Zx;;|rr|r)%LjPI5>pqGqi$ z!DbvMs96>Qnq@<bq5`!W0!|p>sZcX)^Cb_L)L^@4immj`S;18cTl9?f<rJ2w*lOMd zXD8Z*SIEzVP;0Z$jCUJfT7G+!7v+Kb-j54fP#sz@+@0YrSkS{6#%drW5zL~MY_4aa zs};G-V?iCMxpA`||B?g`>ec{X13OJ9{v|9)>VmT5xTNaVy%9#{<Z_-zmXro=Q@XUf ztly=dqp4#ak!MwJs~m3>v{hwIt5>XFDkGQ%`B0x|#NVx=P~zy_FQ>DYfeeJ0sYOX- znm-30gY}mwhiScEzgtt<NIGkO%*M<*EYwMlCMe;}Nk-zneYnVdNdu(fM9`oi!AkYv z@A5Iyi5TLVKF$d_v%gYZmGT<7_d9gDvb?$q$+fE?nIvxlb8b9go`JE!h@rX)C;GFh zA=2!6#OK^57tOgisarD5Bkjz-jj=eFA1aU#^!vY&ev2VaT_Ap|ufg!blp@B;0+Db_ zxWVL2uj+F}&F1UR{*{t`vZYIuucDe*J%86zZ?{qZCcaI@<ie{tj)t*OrG(@8gRFv& z>o3O!8Ty?zdx+dFegMb*B`TfVtheI3Sr3uxZ6%=bemFpvc{5l%k`(Sxs_N*0H*Jjg zTa0A2%|>)tvNY+Yln;jqMO|&J4DHvz&stm}%6uWNTBBkisOByo(_rU_aJn=(%2uw` z$ZX%$_R<jzA(_8eC6hSgEkls<YapEfie7^;pjmmRLILSHS5Hkv#7>_~BSo+Pm><-d zZ0&zl_XBsC==pIOY6-6e?h!HxPFdUJ!1F^APi~i-f|FMg*V=Y!!)`Ns*E2d2LiU^u z|E#LUV~YIMDajl&u?ke#zCIBeljhI7_5Q`qa@|&V<?^X1i{$s#m_<G$b>`XZ583>j zGnL~7@1!=aU)<!P46)i@zDAuZTq_Hwss1#N006^6^wxmq%LleWP-eODq%kdu+((mu z0F-#M=dkRxz>FtvoMfgK<@D6kI6t=2Ms3Hw||mQQDDjjnPx+@6}C^ATS_|A^wO zl6NP}ou>s_NDjh2h$J~A<dTDTm|&DpvwTlX?~hrJH^yyAmPhYCz&V~g`x2<AowfbK zs&vORmcp31XX{=OJin=z1~TA@T6U8p<4BtJ9neW=NnC7AQM!1aROC<ST892p7w@-D zVaDjN))5>zKoj689pW;G14b>~nPD9;;vj{6T&gY-kQrwwlU)K_FqA#`A+k`G$JPVF z)7whHvfLc$^k_&wIpNc)eq*DmE;)eXgJuF1F+kJb**X!p9aO|_7Oou8Ldl`11@=36 zSz{b`ifP-A!hepSOH2r=x*rBF|J2y)*|h_uP#>{~v$msE=A!@w4)8hvi0H>3NF1#= z6*#ot_lGI+3|cRevhbi@zRKgD6I0%H6w@Rcax!$x0d%Xt3|>Rvc>F=dA;(OK`3m?2 z!I4O}jjWjf8CN%o4M289L>uy?*Z!KvsR_-(c$hk^w!G;mJ@r$I?P`@7^I383^Upsv z47S7HYjBS9>yAxlu%*N)PbMACoQqwHMV$<UIS6KzQ@BOGV(a?9(ji3qKc$1_KqZ<< zfR~c{iQG#eiK+6Y2WoGZb^|P2zmjzW+X$$F=MkPTKzFMM)zEEt%#7f7S5Wj7m$P10 z#}K%$JY^^XQndkIgtvhe74-{ZW3L<FxkG-;5*z=Bue*2NeuBgokBlB%VeOcR)c+<{ zIt9tGYhoi3&!Q?VnmkA|Pm!N={7XxEzL*Ma*7Ncvt|o)=wAnDW{Y|Sp6=ouI1G^)Z zZDy%Z_;4&;*6)iW-^^0+jI6Y<dyki=Qa^Y75|v5~yswx_P2)ZbJ%nV;gk<XIBc`>H zbO@OzsVe(adS`ZFUuY{{Ws6{Y#Y#uW%Oq%1o%|wh5OFs)u^3-rx!9RX^~4o)0j?cn zGM4k<$ZWrQ?~4w&1Hi}Qe<u}-Si<ghh0BaQY4wpt+Fw*V2;wn0-y#E4!4N)wRm|TZ zYEey>rTA9we^(Ue^V}hfv)Xw__R8;)B?<f$;3Q4_i#WHjnpJ=c{>ohQ1&_E_T6>H8 z5FRH?g`xrHjXMcE8pdgx+Xe}?cC<N4?hOvj+RO?8C;gNx<vY16pb>WOqoDbKju5+c zz$u^lmF@_ID~v*ES2VCF(fhVjv(f76*qd9e#ztvTV5dvt3l3{X&VU>2#}45txVsBa zfsr9y;O^08-}Z=C>TRX_{#X8+5EQN~$;Xf<YGx^+#YH@KEa-l1+Tyd}h9+~M*g)#S zp_ap^!up~;6UFuhhx+Nl3c)4%9|n|>ejJu$@JMh@M|`A-r3{o^6s|Njye5y-L@Mzk zE6;kpD)9Lv3>+&!05x59Br(AnEx0?Z=`tf<8VWkYN$ttrgRBi*_df9bH;O?RrLN3V z8cpSrBnEDLfFp=+DBi^o1qpHAa(ch@BW?E40b7`F9IhI0g8+^i>;m?XYMppjqy!i> zGnK>zJa?|dVLJ8{0JhAJ0~C8{kWAL`7!bX<5m@h=8)4xR<hh^zI?OIVL`B5yf*KSG zDri+sjj=SfIsKkjd=F)sKTJ%_HtW`3lzc|T@v+q875RP58Abk&6=z!>n49+vaOi;* z4WSB`1zX_?Hc=#-V_uModo`$>Pi+^GeD3^4D%KC`H+(UFb;rjFTX~&PLZ)!$ryZJP zi;ny0afI$AP1h4oNbSL(3Icn7v;h_?f-m7vrN4&q>VH|~glvL`8=HlU1YVGTbwZ}n zdd=aTP<xz;kieyx6z{yR%bllzX+wo(EL8aTSpFx*4e-Ne&WHqRB6%U=o9xIMDo#+a z;5SHfB@y9+wWu;d!4ludQ(&3}&(@R%1&e9|DUqrWTK}dNQ%#XMZEqS)wab@hsWc$Y z?nv?r`cqFnlR1h=APJEZ!oPXISVPR|0na><BR-TEzabZD5rD@o*DgVo&cc$c=OXBI zfqy!I@@LPuI{&{9y~zImeCUPjm%&SojZW{iLRmDnUZ_Xzd(V#xh}t%=_ZRZI{C(;r z#(HkxmBaE;;Q9OAE1!e?6|D+i)GY_@N1>yCIv6C`=q{zmdlifh{^nz9toAlbbck^I zEMn(oYWOSK)rwMMAmd4JMb%bn=<AF?k*(!SM#E2$$H!lq>V~AGx1N7_{3p<b1ALL< zu=JgS_S*P|E&QqJ)Pb%@#j7!al+9e<lQnLfs{V!#d^`;PnJ#wSPL^2K8+zR3?Kk=V zr|EwZy8iEDeZnrI!39!({{8Yu=#LwT`*Z6ZHIm7Zt)PmCIS#4%vuiAU)x%SWnYLO| zcyI>o`%xu6=~beEy+@V%M$x_!{ghWi!dh?W!rhliqOB?2w@X!*s*)aW-C(TMCw*M8 z_i&Jidz$BOIiYsZ?eXgO)xw9g#HWrn``#Y~Q^<Wk$C$=TWVl=Nn}|;0i@va!1JCt2 zjM#jq><ZGQEN=WUm^>zjJ1B_=lipx*WkFX}?57Iw6?|OX@|MAN3><nZylGlL{Q1T^ zmEq+0K9}>8%lD%eY1j7=TwRY)my|7oeNIDYpQw@l+bg=6JT3J8YOfl5-6yl#6<N1+ z^NTc#Rbo7jZ%Z=~4X-bB;YLfE3N>y{u^v;|%T@{g^kvP-(RE#-5B?E?UTY4SJ>>kX z<DvW_61;i<`8->i*r&cHNbsQMHtgNA^h2?IyARywViVJaugc=psBG<2i&Bie^8z>f zm5u^8V@$M;CzIiC4upTjhnzPWdz+a1S}3O6oD>V#3|As9<JeOvw+YxxysA<3h(3#? zY&}n=!Cl?;%2;G^q5zr>N0&k}>QRx8{zY3o8M0z`8I%A?p21$Feu%t?yf*`RyeZ++ zpXJ4q6<Ry80W(Y<9OYG28Y8ZlG*DgHgX-!<(s%oAf~KC=F7T$F4&ClXg>>UF`3lcO z+qL`?_vxM{bw1Ln?C0`G&q8)^m}qT<$J?J2VnrIIJ;2i&XoCrjfKL9cE@Ga?vN_V% zNiR^I2Jt7An0!$)cQAWax3Xw0`=IO%CC?Fmd0^Gd`nd&s?y;lLUDubXUrsdO1eQbn z1*y&pPUiOC%^Sl4JGG92<_ff`eKjS%aiqE0ysb6Yd_W-;T`M{;8g=#P9pY(BuX@|t z(-49B?Z<d#!<AA>0*4Oqt>~~eJN-(u!|gqn@iFHbM<MAxK6>-Lm-LrOK0vp8S`|t^ zd70?@GpS!uX{o!d(z=%vToz;JjzGJ;6<)(*e)z4hR|bE@D!#QXEkjp}CN<-{ZwKh9 zug3UG^^%Jt{t~YD5KDd%#&C$c*UZ-gB_^_VoR)H8OQ@HuWL=a$vyJ%sVBkZ+Qkcj` z!Wb|t^K{L&H&_Z9ww3esHtUvE4B4wL_{GN1^6@LXs0hVQdt;&kbWW!}<-p2nH_u&| z)X6by49DG%d2%%MR8drt!8rR76KhC{Bp=LuVlm(iTi3Wb-rJQmwmt=}ub^Xxw~y5~ zh8cl4GSD*nIrF%E8ISlX_7xBJk#a<R;E@M#3rWrtT<U!~Rb!Z#$@}{GBBB(OnCW56 zo6ZeE;^;3;NP)JO&frQ!16{W68zqjc7#l~rTR%^hSgU|7S;dnvjkUwUllokp6yT~1 zJ+xnO*V9@zBhdf<&Nq)+0WIA9-mP9i?+=Vc@)LyzjKvSzgt919q{Q<qRb9wf(CQ+H zR;n`W>;CKvI)o@K`!O`$p`0mr4ejsBLBC0q(RKQI7O=If@>m0GRR;Q|N(+RNesE6c zGMQa%evg%TWo6hIr>~!f9$CnE&z)5grKb}cLT0NUVj;4_Iec?lK3^;uZ@FFq%Ej-7 z%tKtfz8b=oOS=dtY@dWEmpV~Sro~J^-$6h>gA%Oey%^>#Xv)ccK6;VjSY}Z4Ys4VH zHJSlj96#*7QSouD&(P~4@Wbw3!yQ;3rEU+da;8{EV7D(1ZQl>t{^EKDQJOS28=7v+ zNzEQeQ8`nr9tFc_2O1)wVUPn_(7c&IbhlYML(-cDx&Q|VeR>Ud+kaXKTZ3#5{^2Rd zlHEZ8uFB-#0&L%rc}H@gKW`DYJwt~N_5NG=Z{NKyQe*PGxo^JWiY7jcA+J4V(?x*q zSkwbFflB7B1<^Ce23x=e>ai9?s-?wL+rS3sdZKNd=h#XkTTE&jni2y%+1?mpraF5) zJ3;hfq&5b6a9`nvOB#jMeCT8!VX1#}U+W*UpZ4BAluPg^pzlX+EGT@@xm`mz1{03y zaQADu)b6^p?)UM|)Gh8es&SKtXD0<A{B%!VI$R#k30ua+MVT4UWVw{*bfH_k;C4Cu zU$yl+H4qOnNUbsqXl-rgO}vg!H$0xxxrbUZQ@Y<u6mxeqZ?<9CVA|OY`+cJ7<^5f- zc(^Gor1;K)RGG95=lPeDF{Qe}1BXUstMIX8I0u-@I1@}|X0CrBok@*{n4026!lBm$ zmGdEo`=){qtKMT16G?k>oQRlbUR>x5Qe|kgYUbIS_i=P8Gz^!Le8!EHGp)_q$D_uw zC=YxLeS&IM>tBoJ!cgCI<YQ`9G3+1QZeXabConiHn6%oFHC|f{qNsc=0!)7aDU+?n zGW;NaeKt~ga0$MJfggO;o~fPE3MyE;^+q(;PZ`Y7RIsL<p6VvAO=FFo(7t(DI~|&2 zL&p-DWCKi+_*pZAlBD25K$P-eFy*ly<-u3o$1`y*$L&lyFxIKu)L(HfXH@-?m(D^( z?9S>b&om#~92{&)v_TUbg9#3&Nd|b^78TCzYQ_0~c6mxL#<5+>_L1-h2MZ()^$R_D zm{;gPAQ_4_kKlp5w$~}5c+F+6Js2Uc`*tjioTq=}eOV6YK<TF!cXDp|6bz4+lcn7G zqDZT$QqD7`+u@;2>Dy;}eb(6Udag4eqR7d3vIqyENRB8<s~x&GbH#NG+9+Zw*BF7I z9IR^FF(`D>ByvNF+pnd<IX=SIG#@|x<ghN`W{!^FNsZLd={wyOn3moz-K|bW^PxQy zU(dRJ$st^&)vqG{vi@$ZMd`=0G4Zw>r^l=>E@b01vLhR{9w#*xTckLGO;KrpO|^C} zl|@Ymnei{uM27Kvta&fy%tqv#Q~34dgf5>$X(R`CVMUkV#{zd<<~mQ9YoUZgj>TQk zYBX?TbpxUra^t$ehh7MY9sr5eUg3pFN<&S|AA6W5i_Zlr6nqN4HLbaBfrHgEgM<A% zq1vGOUh7fBF;H5JCshRAAAV+HE$I#nS|14vYG(b7mj(AG<=}7Mi4}jA6=;R3A^~O@ zu;WyvavqOZ781G*bQ;^CfZd^S)MiKn%bLwFi+g4XwAn+jSt&m6zL4ORrqb2G8)bi- zPxAKDYIP4x=p}u?8mUnlI*uM%?O_PHX-h$62|m^}uITCN>cT%BLf1%?vLo)8en2r7 zQJxk>olKNQ4R3730QC8M(`gWMd5^rO4*J&DB8tP%tQD6ErmW>vGOZOz-paiMxcJ$) z<j&mz{C64h-{pBNnPd5qh+v({oV9X;w-x>fqSgpRg-J7bwWfOgk$y%bWHd)8d|j~N z>$`p%zD2A}`3ywwGe@FlkQ4Ye?kz_Ga83enmQ4vJYtRj|)l9z<M{Ac9GED;%Ph%*i zArwCv%lg*|w%+r<orLlg2UU84i|O@LmgOY-fWP{1nEU=(Q<+&3SW^yIb4*d`*X5ML zuQ}uL$Zz8_6i#4mCn_Q*?An`}T+rIhU~MCr%25jD6L!i$UqQQFHcHekcF~7v8Z6)t z?HTuJkw%<f);(8RPAAGYW?RH)GN~;F6O6euh>C!hGit?(%`Bxh%p+pDeAxkcU?8l# zin>L1(nsZ!a2RGiNaWKO0$Fij!1V-xMGl0kaa$JUZ_R!Z+8w1#>pdd$_TK@%uD>BP zfdLpDwCxt*YV7=O+HbL$r1+!7>SS_Nn*IwfA?D(|d5IHZh^kV_lw07u(aPYwaqThU z=-gF8c2(64Q^L4Vo5zOwG}aUP0hjgvj(xza3dR~k0c(K`*zL8*rt7xV?wXG2U0&*! z>@ltWPV<EJ41)HU;FEi*@pO6fiU4_&E7}Ah-_Ly#rez{24Nu1o3=ih!H>G-Gtz13T zxbi{xjhHZxfbbhBMt@In18WpP@n_LfWN}MWxp3Fn?zZS@?ra30KMLSfz+5x2c3ahe zKmEi3`pU$`Omiv)4+HpCk;+7pm(&rGsd$n@qYr)b=qeQ;=&wL=x&q>K)b;us#!v<E zW|N6^>kC9qR9Lfhin+}}c12F*qA|l9K1b91H(5^DqY?(MPy&Zy*V9>BfYy@+>s6)1 ziZbYh<tFzN+94Ul?fQbL2MM9P<NCx+(hdrw2zwpJwNLtE>?|AgksM0l%wtZCmj29X z<0fYRM)S6Bw(cyUJs_~jdJ2wKib+6VtDRyGT_?d-{17R*nC+X<4qOj5y>5E#XdKzO zSotF9dho3Wgs7PFKlVr@H%YA76x8y1k4SLY#4!7_qHVNs99{DQ#3DOzDYsGflOUHU zl0)faXdw3MG6qUFf4BceCpIkCx9N5Vq8iXF;3~y#h^~ePzJ6W)*Q%!<VhC9LcX2?z zAf()eVXg3W_<z%!ro1IU`hURzNr@1Sfx!>Zz%5^Umj6j>4S8**qO$$3ByqngFu(q& z&O9W~3~kuP;QJ>IuvItL+<+#o{n`UmUY3Hp%)1&7xzoExLGSkN4&c;C>Z>DM1c+Q9 zCytI3m}vkfcCYFZ*d@m=lB%Zq^#O|P$CK&9Ql#CYq!+OIZMi65_Jx-ZGCEA0Y>ns$ zk@eto^*BgHa%4UBbXn{FZtjzk#cS|%Ajev1N1$~3-)Sf$JwXuq2C#r23<W`$>}mxx z1Cdm^20{u%Dt0ersb&zMHUOa7Sfg8zohFevgBI{5V~~_}XCl;Bx*?QE0F<mM=@*9t zjDZ!#17*grE0{4#dV`G`V|iA!{e578yUgvHV}VmKS){_dhKh&Ui{a+IHA-mSo32HP zV)FvMN{rcwfAsCq9ecmk%M$U=Z}mm>Z0tj{>kE=Tg6L_(orLGnAgjK{S21+g0%SL( z-wTI$rygRFWzUD;{B02klwVV*KOSl*{^7UcE6gYmVK69P9L<;J1WHCC#N9MQsP7ZG zK^QhukVLydAO;y{yEfaJoyZwrbU_Zzp$K1qFxndFx&T2GL`!N)Q)wTb44A+xHH12Y z$O}7x3f3Key;1z2%_D<{Ug!K{*c(*ne0{~sKvZ}FDpbMeQx-yX;3b3vCkV8?g*T(* zaMA#qWe^F1*-jqjI?SwYitFYmr~rd=1LyzrETav_CnZt@5w2*AuLwD$Tr3C5#4#!_ zSkPeD7VyhY?^;?{{5$^-5tPTp{YwO!$&Li9{xts;LNf&|i`!6q+<=nVjip5&34X37 z(7cJ=`&Am;Y;1J6wZ;;xb3Lj*v%J$hiK(RF(x=SCkFrKFnZKE2?7cHpl<;q&**>bX zDXOvMMJcfP<D14v_ya4lMceE2y^=Gk<R0L>OzclJ7)-?x96j7N&TaPFtn&Qw_rjBw zr!*ck{#?56=b?j2LkDe-Ip?2vIzaPb`=#~XOX|IjwfPEV8fEsf)ceX{4C$&iK@C6U ze2>E2XIb%k-xn#RtcB2MWIXRX^6WiN^_ZQ}>Celb=vi%M(q;n3ZKWSRSjuwwctrG5 z)tZK9&Xs$}XQ%#dG8{wXi&65in`>inKZdfiEXXTAB*LD)4;9XJ+v$;BZ17%?ML$!x z)7ZIWXu>1$2f%sYe{i<pkopT}AWiI|PI$ntiwgWTO3PK&zq8L&_;g>h_t9?XTVg|y zHx26v457SfZ>Jj)mai2<5zK+MpcS|cSYE8fqcq1$l#4L$e05MoltF#%d+E{cRz!d1 z(fad;fBJVz)*|RuH`nUKuUYDNj%I>Kd*OqM0F9BuZSs-I3q_*L5{XzeVz`~dyISUG zpA9*PtoC&MIYK37<CPY1=u3@(6hG$AJO-usE@AJ%;*19b=rKq)jPKYT*F07l=3njo zSv4G@KXY=v|0TBt9c3Y0Di@|OuSixZU|K3ic90df+pX(bYNd<w5Wv;$p>%j{_`pG! ztBIL_ilypxMcKP7YYzK&M<v8YueZ*x7Us#Y&AeeeFZdl{a?TYt{Zp5YvAP<*OR1jN zNR1S<LkfzUA|Lo5kuRI6c?X;_9}u7h3P>N$wV&K0j_CXQqkQrtwxL8koBCk$lf%qJ zwsZ+^%KgNcCn0QT>wDzE#-Y|`q10yWYxBm+$tSzrcU;H7?rfpmfs{;b{)_0@ptImF z*5M_^eOHx*@lSeN;*`1+j=&v`Fd|3D9lPC3&KU3^C~ep|hF@t~ZORXB&33AEa8pu` zJRo&GmBP)s$q3k+@vS@~#NN^+j>$raXdO95ATi9JOnzT4G?CmP6_LXe>GhmQ#bIJ4 zh<N%J*?V1G!<<x{`11Lem7*<Z*?`2ba!<pPHysIJd;Kwjjd<=MlzsWXZ}JdDSkU?@ z0x$%(PS6dWPSc@oWZh=TxUIvRxt8^*F(d#3Xml3u#`|r-@ka_LPtcHELMRWI>q80_ zxBK&Pk0EVa=&ZfiWGkKHu5Y%N{iFPKc1mE)YE#ZyPuFcxR*Dp(+pHmN>a6=F&2?$i zN43)7;*>tRXkPy14_&OkvyN=H41TiJ{CeNTerj_9m;CO0r!HU8>##WTSO}wPTRY|( z$=}0M9}lqJ6OVr6A#soIL%a=1|K)o(R)9zXe^7|yF!wrC+IiYbNP3Fo`AJLaG_3zo zcE6_NE~8R&j5>8EWj0A%<VdPuyKuF~r(;_q8SWAC%tOhiz^m=hZQ5EF=O^%kUK!Kp zk(|+)X{F(uvL3U6cH{n2-`6Ky^wF1-GQD-)|Gx8Z0X@xmNoZC3))~O{Sp(}C7S}EY z!@mHo&mdTzYxOP<dOkEbc9FQc9LV!}F5Y<{N$v3*N5`e};Vg}<b@3{6@-_Y!`TVbk z9OjLF$uYBoGLC~dfDJ0+fJ+|!<1!EN0PQE|h^B^gb1Fg!pGopYHpOl<8+kgY%HA8) z^|JNw7z2*mwkKo^&%3SDOZ-AkgH_z0DwO&Hu|G%$Z<lpTE-06f5`&T$$q~J4qU$4r z%YIk9^*(WsCiW-uu`Z*uw+pG(3{KEkuLgS$Pb!$Os35wn!%8SuF>q(scmMn8NQpsI zC}V;@W5P}nl4Yl*<)Cf}Er~K+ryf3XnlavOw0G|YNVWhL430^8#efE=7=U!=(M#Lj zg4_;47XGq|;&sNg7NYTTMpNnIAEWW+<J%Uf6z#x%^XrIAlEJJemmuBYZhC`&x$em4 zOI7rK7f*zxgKx7Xp<FSJd8`ynG!NznQiRq>CHf4J-QJcJj~V><x`ee@m4EHD;$*jx z=h-gUg{NyCIv``gX_A0ugLnjv?Kv0|xno1FQPFJ!3~>h=J*vhuFgMKor>@t1Y&4eH z%iP0*0om8F8>hA_kNE@9UO#5ALJjS^vUPZ63Y4G;V$KYL&iOas&bKaw^sKgnqe7Kv zTeO*5R-nX-CZv3J4;tCsfP^Bpy69>OAjo=<t}zku5`K6n;2%d=2sIwy0N@{bx(qy} z5>h`%FC1I~lDKVk{tA3fz;uoc4zXS%jq4oPFO;OsnqNQHLO0fUO61GFoHlkIMd*Z0 zpXVSQYDzn6=Ka6011)$Z(uK9Sh4~fwEW&57<J3L#K5#yFCMbfY4Lw4ygnfDV&3yF2 zNLW;*126OBt<U|nH-Vgukg=3CrGGed<aDs;(=|?={eU2Juz*yfzk8lDWxlGi_g-XI z$cY3@@uqtq5|9V7-T&|59GE4YMe<-kaLEUbx~u;zRsdvg3&<Y*e{6s1o@NG)R|M&~ zlW*6TsCtEvOQ1Leifsw1(-wWg`rd)C=>}n=A=qYogZ24s_!OH`ku`^slHzk8&j)8e zdU~n(>sIU^(9bw*oT^Tj<EEezvDE^G(@CxNWAWh{e}kC{R52J2UWo!|2xDGDLvX0o zSy=(j*$2*XK$Se(IbLNQ-O~3X@<_g64<t3m@2YSQAKHcb&__gC3l1Ae8q?(*%!-LR zFb<%tI<D3rUZTwD6$CgNO9eAIIBqP(>hZY|Z{pR(FZhu4uckjBa0R<g{E%1${4PK| zzwdN`(1f8_Pv0cu<k~$|&lz3Uf1p;Lk{rg;e<}~uydvek98mM1g%ni!E9mm7=0JYT zcmxX?IQbcH@{;AcsnWjtf142TkH?H60VwMsNqC6ozQf_Aa15yD*q`+nOFjIyf^AV2 zv>2c%Q9-QFGH#0|lIQhYUzz_F(~-*L!^ivuQNpqftPT#njkP+x?z=$X7D%P~g?QCB zl{TQ8LK{FUjhqtE(*XPdHNMJbwa)JyZe>U9t;IKoEY>WnmjB*=vMqp!ukm#d`!Fp7 zzaYFe!&lecY0}s+z^i^Qjl5I9u2aCYQ{M;K8JbDn)%6|S>HYHc6Z^}ufAD>Ci?@IN zIk@j2fQ&17+K&it8+>ddp4r7Hdso+>LwK-Qr%Sqw&+zPij95azRkft6;m6_*uL`Sd zl<V?^JPw!C(rWQO76nRIU!CM)`F=6R`E?9;lnDBrZ9hWY>uB(og59g{UBcP#FR4sc zpp(h-`d#ND$vRO2_MNHZ93RO$fq1@JS7aewEi}38b4arPHwB6D(=VR6{Av>Rl2-f4 z()Qi_HTjqI%GDO7v2wAC=J=jB`9eW~+$@i51_g3+WofCjw9}-P?{5-Y8w-7obS88r zLfTN}br|o}+3X02Afcc?8;IQ9?zVC+f?2ro`rBDNXX#c7ygN@LyzqsCz8g5AyPmuo z>xg*wHzAgaF(rfo83rV_!e;Y94;jtGL#!<Hg!6%m^Bb7*|GM}(8>K_Um29da#d4al zGR1<I^x-i0EKCV~Yz>$MhE3&lr5@7Ks6?bP3^{ej7=g65MmceZpwv!J|1Gxp>q?!Z zzoB-oEaOormD70mz6_Kob$Kq;4Hg58)%|y|O;$<=_-UKjyNt6pkyDR21^t4J<(f+6 z@kHdHN-F;G!#gZ2OmT180u<3Dv;jK51Q3+DZ-lr(fpIlZC_F)k8!9l)2GV!8JBxD8 zHZH8RlFCQFq{*ZWfG8en<3QEJudM5<voFn5PkwQ2!+G&>I5qeZz&@ZXgWX4=Ef3{) z@}y2P!Hii_`R@8~jy7OolV-@us@E6w#9~7%(ZTAA#R)rcv;n|YN|8yT`c0t^0!2Zo z)mfO&OX)zd-f8w=zK0hd)L)Uv|1$66@dqp{NcXrl+_oR1o?uHz341`g9DseXQ2A0S zU5&bSJ?e7gkv@AnvfF8);$5Ibc!ER%_HdmOyDLlF`RMCWPa<1+@qul?^j3bs)PaOn z5V1cV*8w(ij|DaYCJJ==n$yW>E(ba^3WVkig648ihvrwT%;M~8le@phx%wg~0+1In zmB{ejK<zn81)s&HD_*IACbG83{k^*wW;)_srG$svpauX&1{Q`K@xbUlixK0<+qQd( zP3QhVCALK*32`@tf)Q8~*j=S8Bsb_ZyE=b;9Zw5S6x51OQ-i592%lp2_(PlJJ(E~$ zTY76!Ingem11L2?hld07d4LH%`JOn$e0{@)1{?iqw>aBiV&HkrvAS(bZb2?`z7=Ev zlV&Ip09TBT#D;K%xGjQTI_KfWX6e}KG`~dND`47-A%~Kf4R2?LREEQC&uf+<Kal!R z`y(ufU@^hTY7+QTF&y&u&^=!}c~1`ueNEp(5?8ZlY#lGI4jjsX?1b(?g*TzFaW&z) zzuj8QdVY4nBV^MbpC*UC7eo_Sr577bqh)VHo&{fDEKcrsM6+4quLTKTQcn^_1qx%~ z_7zw=#pEv7MfH<FHe38xgkqqU6*I;Y!@eEiwm4gC^2qa=ZMA0zn-e}y2nu`}6{;DC z`ul#t;%tkFjpsF|YM(43XHerxfR9T=<4OE|yJc|}v_3qqIajx_$gdDzq;v&Z-&Kyt z73)bvS65R;)9$YRid789TXuBpXYY-))+Jq+0k#Od`70Cy0;U6O6p*zL23;Ad^Nl0B zC3i8~k_`^!(LcQ;u}!EKKaNhWC2B1;_@O}i611R_Gir5H%<Q~8mi3bWCnftvNk&4q zS^nRZy}QB6EPMJZs6#%tjp*-^tQ(<d5xb3g_y*Q&;v<P6mf-IN6^|8HdS~iEx!&8` z!Du>u&speNzrsza3pf9lxO5-;nhkn-c#XNTgt6Qm$oYuy&1WlaVvxI(|HuRfbe-`? zqG3?inZNEUg^aYatwI#Rn<Xx5iq_$D9!pT75VcY;rJA6d!Al4_<#DMYA;Fhdic@zs zyYs~jC*|M^pnC>@r5KKE$Kt|<#LL53KY%3+`P11&!bPCXX&&@^1Wci}53rYkR9{n4 z6MP?-E5V1Igt6*<m{E0`PZf)YVtkt$sM6rNgIAab*qNbwF6VeQfewP1gXn^*tkIFo z8_OT$RI{xFRT2W)L16vUjf$U{=wNxo67T+{?TylUh}8~p6bKELS!#|YY8EXhk$jbs zsaD$1h+2HTWND?dn4UXhrIk+j6f`9N6JIkE2~d1}1o7paoKC>(Kj#lLS}=UY4~~X5 z<7@NS%fodno`sD0r*kBo8-8vG=$|G@g02u2QUyAzv%@AjUf106Z#6KVNYt`!0l0%( zP+O4ShFu)CuLnzg6J5mHDx#K&lbYT!<UJ%FqVfi~^DZLthH&?)`_2CLVG-x~#syTh zjQMCuU)a%Chj|6`x}`<2MuLSMU4O&ViHo=7FJ^-3oL9*EM-y-R^x@uJV}vwxqoCoK zHqaJ!FP5@oC-r2S?I`O1qwK50s@l4D>FyGVO$sO|Al)D$AV{f%AT5e?NW&teq}eJ6 zk^+KsgLH$WbR*r}AaLj2o^!tQ`+fKRai8a$rH^avz1Es@j(5D{9b?Y{Hxh_bAzAqC zhYAE?EW$n%gdl7Xr8A812&HYltxX48cGXwku<bZrJ}3IOYX7dQ|6pgXfM4RHaDV_r z`Ax=cmC~HUOp7-SfPR_`O&S99Iqxd<gVp~d`arvXwD^4_KSlAK0Ddqi{0e^jh(VDv zyKr?e*M?w9G_>4<ebiOvvV!hK4d7vbh<n0e{bZk^bCcUuUr#TO4V9UR(OAUIB}h9Q zhR-a2TmCEQX3j)Pl)^v;L`q|~i@;DVQ>QP1LV;5&g<W=&;rCWZdPQL?V3ffetsq93 z^3%}D>`x<svoUsCmq+d4o~u=fpY=V0Jay^4AH;su@)NZal}4zmhoy=MlY&P(gN0!L zpGGwwo!&5i8O1eQ^v=vlu!$xrqnie}C<Kf#mwQSWRts1fM7#(ap>CiX9~&Za0CR?r zT#<7&nYX{QRIo0dDe`%QlYW863IMJRF#>1qh*(Mxs}kw<`bB^F=+8;N*FZGTO0?nP zMh(;zr!k{LR~IL3PuP3<Rd_<IG^O8%mG~JjNq_}`iDChN1Go;~i!~;H<weD99@!f8 zFXVy0{3H)4-KO*>T%PSVYI5arNRxF=krnSVLL_J=Ad!owU_`1`3g*SdMK^>a{KJRx zh&LjMoni%@4BL(jR3J*A(%uo<5GL*=66-N31ni+_?s*!$Pfp6Ggzka|Y39XP76kzS z8}d0e1R|`%Xx+PeC4HKdr1XnhjDj}Yw%njyoTFTq<WI3rpPi@p4V8!lItYUZeMpO< zEHltK{Px;%Qhj!s-K~5_y=T1t9+r*AU|7xvk;76Yzu-ro5k^0{d%y$Ic$-B{zWX~H z1;4~O#QJO2CsP=<cz_Xwe+_H^lK2Sya6+JS;G1QcsX|eK=ON-0_hA{2U<=^02x0oi z7aOqNToLOHhD@CKwJiT}=D^GO*g0Umq~?8Ti*V+0Gt>J!Jq5?&ANgPz&JpuMR%ob1 zzW|i|M+1lB#q&W+?2B7&mu|ZpM^>KFv5YsLT_9c*<RX4OK)mQd?qlKz+V#O+DIcr0 zNhy_pp;w|=*ZG{_L9d;(WNCpIL|Y<5i&#dfHYsk7R+G;%VM?^6>}$PSKdqSiWq>*t zZV1F;gcc$<W4*t#P%t4*CDLzK)s;fO#Ip&nju(VLBCwYF5ql=nr-Y7VFfV`)BqQf# zMfW8@tl>`pu`J$66RmD2{0}GB;xDlToLq#fnmxaiYYdQ-E9^iXhng3W%F$42@ef-9 zF7k`3n%!W5ZGx=CpwT$6j2Rf#o6P*0vm-07TX(p`iMJtA{9Zpd)+s$A);(0R0W31c z(<2`5`<|QnScRA3;$k^c#6QA^vNV4&G4Akys3ig{esQq0#B<n)iHWm2Od3qYzhO(g zDtKRw5Vs$MMDr^E?y2a<9~#TAfS_k{jnDRe^|$j`beJgqNns8cX||Jc&@TYfUVwm) zLE84U;b_2HN*4;-kqJygjg$b>BUV3PtYI{nK1gGoYZTnu87v4BrxJ)`hz+6fiIxFa z^MG(r8VP)MMwqTHueD`hAvAws<7@uVsfv_%_Su=`jxJIH~pC<qj<7TREnSPXkc z0Uf?PUKu9bl@2tAr2d06F@jNn@_~;QUM5LzcQ(1~_r2V=SMQOEkrIb1h|(Nm$~j30 z)SRH4J6-IA-k~*>1<1ol-+wB+`WNOU9_MSp4U<W*ifAROeKsC|pexb9#g$S#Cp9VI zf&}<xa@?qjqtsdm;Ow1EY2s}nu|AVZV5WEKxE>7PS_YY^@)rOw2C09L_eWf0B}p7X z7~gARG%p}89q8iJiVl)Vg!BLp5G!!5e|UdqrQlGULzHeJ8>}u6*CWgdhyx>ZM@jNR z^43?bY7T=Xwz;xWlSbo{q?XN-DYX$$c78<(hD5a(mkjY*xFes43l5IBGOf687_~S; zgrJPkObrYS{IDW3TPWIwC&Bs_mJtSPcn}Ih$UN_qIQyFhn%*HC{?1Y4^WJ;h(<8NE z#DUv%io;{QpSsbU<3x^cZ4x0o+aHpIc$Hi;;%&O@F<@5%(DqFxvJ3IUCh#(#8UO(U z;AMU|9qnutBuHe69n}@!i(_EGc)t?DKpOAQ*@p)^I|XDC9O6V%k9}ce_dtH~uUKBw z!0rX78=yq*VDDk^Vp4946&{&&9mjtqGRW>Vmx!_91oK;g3<M4$O9WABm8A#D2U)Ea zlI-0Nd;NX44Ude|Y%u9;zV_+b{ZuaIU=b^3CNgHk#gtl_S%KGrpRN_&--BTr|KU-9 z9)YC&-wgcx&GzoQmJjsnKY2Aq3t<#2HsZwi3f>D9c7Tjg^CI{dFwPH@>$77<EpBQ~ z8r6r1jsOAYTfy5KH6sQ9;J%h%4gf;Jb(yK%qk)2UKXDK&xJCw&!m(XJu<%4rrvRo8 zqsqbl(B=*cXkjF<pRBn4Rwgu7hWfr|7F;431_Fha(%h9<8Dma2uE^>(b!}vc!L#>Z zxd7Hj-)Gc}SUBKTBZ8@5rH8Hj*Gez3CmPmZsY>kE7ccN^+huz6mj9R%Ma)jrn;v8k z4olzBi;Xs!v=IS<lKjE1OwSDW35hFkovw(QB8UkT6}^t@T`Ukdm1VF!T$;JQs6)6K zGbAr^mXHU*#f>|g<_>rE3S1;I#izXnsoXJM2T1^KA<^U2oadIgJ-^18m#a-|L(Dns zH$E>xJdqkHEuaphS%g}Otgxvl)0Oys@60K?O+(?l&5B7ex#X|>U*vsH2*9`AL=`NN z^(e26xnmZ+Tr+=oyf^&3t)qbE5j#La>{gJ7HEKrWViBWImKUfMn7b}BRCsKAdru9# zNrIqjBp7Z4akJ1JY3ghmJ_M`$ZL!z!Ow8qXAZ7d4xG<ipIQhrL+KFyzVP~7qgOa3h zgiEa`gMLYfJ9D`Jv!_X@TznQ1RL1h}G@F5)$tQOg5A7uw1w$LdcYh}P#>mWpRuX~+ z5(I^_GpTWR3DDk#g)rGjya`b(X<=3W+Rdum$ckA1G}j1gTX+=9Gd${9%L>}=cAV2y z{Yk^iU^@cV>nI&a3dw?42dtDy?RprDo~i&_t}R}5>VId$HSA2z-CSHoYhe^Hn>y?S z@pj-uz#60G1&a-_PQ$|1e=gb?%_A6Bqg`Da{kzh2#r2lJY3EqZq0D`0=4znGOwZC! zs~cob7xqY0JLfoncfKTo<gIrVW8*kLLiXm{dmM-|C#^~FLi$X@Rc#vWGxN>2S!JR@ z<jSgG+^pcsikJhTquN0B;F|41g*{1ZYb24kRyW3W0<Yv`7)WZ;M!J!?B=vE^V6Pf_ zn!|?5$|P;f=k5|Y+6ALvwUG?Pe~5Mi;|9RQ8)|dVvp;L3G)6*PV&etz!-#T*wicKV zjWGzH%!rQ+5m|f#JB#b?F7Dc`ut8W`LX8~5t!G;I8Gu`7IFMmLBF*sl;m%os6N0hN z3jdOLX}0N>;kLVbM8ES;_@R|1(RuT#x94b}=itaUPfLi{hGAj`fLh&g3Zz#-#&L%O z01bx^83z(O$_1MO<%7F-c-1u^`<hb|(GM0p-0n@Q9{NPtAWdl~NE`7Q8Z^~e+@lwM z0DtabPDbX95@e1ZM2ZeFTPO;w-r6J#^o%i7&FBhz-qrSsX^Ki92a(au_~3UB%k){H z*G!NqPrIozFteu+R`2v@84o`ZLlUKlCfeqHCoGW`M&10*vyEFgKA-um(U?eBoG9N) z18L%x^=(UHZW8<n+_V&FJuII{cpD)TiE%Rt8WUn#$~8*>K2mOy*pDj}>fsoXU>QX| zXE6ggklA9x$Wg4q4-(ZfmM^5vF^CvQev`3PCC2DiL&u(h-)m)r?i4lS51rN{q$bb4 z<u5CbyCJUfx&>D+*UC5y3e1(Fq_JxZFu9|aBnWNda?H2wqavAsnV*~}{Rw4p8twc@ z#p;E%__HT99VIkRzN{`V#0|>cO86Ei51>Ncr8%7%F^y8iHzlh@E#G|&hYzY><^Jr2 zFG9@npze#MtsAys)C|Rt+FS_N*)*#xXw0;E`mMe^Y7Q(9l-MoY;QcJwl>uiBe0>l( zS~%^0!Wyx-?SA?+O}d`BzocPqLw+MQ;7l^F*2@gn-9=lwk%-EWRGg#$FqZ-p`~n1V zIphl&Y-(y`KGZHaNhCC6A}K%#L1%%m@C$@zi%~*G3knz|M7i>~6e2J~zH(9(uU5OY zP_C92GHbxJfq&Qj8AX~8am@(KEnd4gY$9?_d>K29{WK{5`BQCIm_DUuVw*;b^Q&Y$ zS2Z~Resa$8)rau2TGA?Q;JnYV26{JmiF@(fyG#n_K6GC{WawR&pQzIHgmQ+Ar4xSz zqt7qlCh{0_d(Gj3`26hChlN=QqZ_VVs^aoZdpl!ojy}eYS9k*bNs^&dtDHYs$*b$} z2U_u2T0@4~8bTDR3#`P&xh-iClWRjOHAmB$$NudagY`_$N;i?+$h{s3(fB5WO4e#f z(29V{v&xHKv)4_epc5b@jz5jINwrP6e{<#`Qz%G?fYnNXoUd|x@oJt8w1^v_BZTV1 zNxLSSVO1qZ?x%_e8OMjT@4vX(@Wg*OoJl0;oZfEz;!pW2svjh{0h`_mcUk{>;>l8m zrsv6UOqh|RiwaAm)AVL(+g+gMqWY4=PP{s*2Use^(gyf~Q8S<nwGC+>&nhWrXJ?J% zT)14i7}^$7ouv}~rUYjLdUIc}T3t#+VaJN>i_h4Tew;nhWM9dsGq_4vHTeKa_4!)( zgK_UMHkU9p2T7SV>)WQ+Mr7wF>9WIMOvAyl3M_9!*{I3**a?8S0|X}k<_;YmI&`*u z;aeEr+tnr*o7C~z$S%;A{!(6j+(gf~W7l5+lDMIx_=UfkgklFZq{_dDi%V{B1V*r( z*mC3ef~*LJ3<=8v5{z9!w$j1gO+I2(lJhPTQqw0_GpR!H!@ei{cLvt8`Xk=2vo3w9 zOCK@HC7#;65dG$r<x}V(G7P0HwWsQFMa<AkRRv$fG`y_p(^)97E5-?-E*vo~3_A0g zs#5uuG!YHczgd>{_=kS_;MJG2?}Q)N8W?eWV+DPwd3`}z&9^x#KWQQc=m|&ZKu<V+ zxtGUnSgjXXdv?M0Mh)|6tl(2>-lyQgrx+S?MxL%NPqhtTx|AV~kcs^Fr1{6E`>*b1 zNi942wH52OyEiqYUCvL>)yWs@xQ?(=gD@DV7A#m{Lv297=qqRu7w5O+jlc{GJgW&a zo8P0fLwRtZh61!8RCFE`gg`LDy}?CHOd!^2f;#^pVR2~h;RBJ%3B}O8PD^o`@Nc_X z<H=$3tsp7`nie85Q@VYKAM&HgqA7Jxd)$ROx9oR9M!4hKEnCs78Aw!$d5Y`O@za;% zsv)hlRZkI)7&)TQcscFnAf2~z02kM;9eoHa5As~(+S3g2aId5a!}#_Nl-$HWc=Z-p za&yrLglC${!ZPuX5A?@QVm_-AKIp9KsMGD>h2jpje#}-}hAkTCdAY4hPc_(T_uS%c z^9`4s2ci>?G0-#+2I&uk&Ywol5vuc_D&4Vaz4wSZ78`iG2Tx^oUDpgr(YpCYi{Dr| zWss>aMI|>{Yw!T-yrXNguH~qZ@p&II>wD(!xiTAO!T|Jp+ekh?Mabri=UW+5@#I~X z^0Srf7mSbY$wa95qfrC*NR7xasw2q#A%1pO6MECFeeHT`6$Uc_&VHKx8?;pMkBiI% zBs9x|LfLB0SAWlrJ!gA#D+T{MkJWdcxtWE<kob`G>_gQH$CTRR5&w(D**8Xz$aBl} zIj=;0w?l1IEJG9s{NH+tHcu?)<(`m#b;~ewyT<2d`44e%o}9bH_@UoCV#Bb9EVOt8 zp@TWf$DJ|ie`*s3EV2Q@17bD~xETYVF?Sq5?4gnE2@9A${ZZWGHr%z7&v*Pm3i;1} zX?2Gi-G#EA*rP@hKyMj!3a4i;FmW}6hMNzGc7%=oRr;q<XS3_-;-c*V!-svjl@KZx ze}{_GL)m>*{)ggbP#oQi4WnKjo#Pdj4j>#lk^ZD`OdUX>2Df!hVER<Uv2D?Er##uU zwJJf~AHv!|OPT@K?Mu6&>Q{xepLsuhe=e>eSOEYXRPI)!Ai}!!<IS59Jz=`;KM=wS zC%P(cJF=v^jIBLyIsaOO@l2d>c<|sCe;?o-<85&QZ4sK<MQ!@ZtiQ=kFp&jepWIG{ zUh%-7%`mnv2UlU2ngff)Loi=gJS-r?(IQGs{(Pi+VK&8xPvq5xU%+h!-gu)h1!%yG zaM%zT7T4J*y1H0sYrr~bptHL!v0<J1wLWsE>2#8si_hUiAa$u6&k%ZYn??WXca24J zC->Ppcg@u4x3L4s#9gBzv4DflH9t_6;IVVDh{9mWMBIz5+itR#QjhH+Y&8k$=O1kB zp-Uk~s;<CPyqbaQdc<Pj>$R97XQ?=DO>VcfN82%V#p-fNw=(BS>>gtx5JSx$u*(a4 zrRJvWMzUR(Z<$`#ySFp%(RYew0>7K(dn@xEF!$pr$*}FUiM%-jE^^{tVzCS6y?I=^ zYe2;L`maJhIBzZkVfsgv`hc3bhC=m`K1TTS+-p!)I(dOnwu_79XyvtQv?Cyn1|JeM zYznIK3xjHa;iCfOCaV@))Zh#*ssa}Y{pTVvw-+WwRftzV{-!!lCHZOQO806{R97;5 z>@53mdClU2t|YN7V)0iVOtJ9tb^cY)*VThMhPC|tq-@9Lj{GY~{CoC(wc@sm#udhX zo!7~_>cFg=)b_Qpq0PgLD6MJJQwfXpN7mfj);4)IdvB=SYrjLkMd=~}YO40UDl?o! zU27eVR_8Cw?T-&ok|d&Yr7EX9+!$gyRsB>CwJwgY-W&XO*sf<UcTHYrUNab;xhWYo zGIQ(WRc=nLy7+}NbVPGE#)jgARzc!QQ6h4$t-R*cAg<<gt!{0T`|9g1L+5VAB~{rW zW$v;L*VV+?me|$OfQr<{ixKY2#<c_+&|(+5ND{s1mhHadRp+7HNv?L~5I3!KmNegR z21#7ZGJKtH3+xz9vhgxG)nXf9xZ;VO^gK6!bT0B2p{8ufww>IbD+z|F^sD3Lvyn5; z9N77y6?Awiem-^CJv78wmoTGmmjBx+>UrJKgwV+PHfyifaT&CGFe*r#H4DF!e+y!h z>O0)GT&FGNy&7)&4Q{cldiC?~0&a4t^Wa|Ca`9^F&$RQA&aX=Ft=6<Fhkb)Lpyusj zwYP@3(_Luf0<t`ai|CSSbu>Q`P|R){33~IYuYBZEE<?$|>vMO;{_Er90q$&E$X!TY zvOa-kXCLw|h!a;lQ7_Pi_%7=fd)GP3Vj%iESDst>x>u6NBRM~_W##&^aP$p4E@E=C zEBqAmKlgs!pMLeTiZk0@`-5|h0d$kSW^KgWMmt7>kZouVH>$>-=l6@{wT)}UMyL4> zi)okR@13uBPbz;mRnw*AE4%HRA1aC1kTHF8<Y@H7^r#A$d<DN=3OTOfX8pWjYPi}T z1knn$SxK>e3w~?>k6}9XDbwYX%%max3}LjPn)OvB^+<(nZLQ5{rx&HiuG*dm8>B&E z23J2<jIN|gH^T!Th*A<eV9@*{YsY<N*lO#x?jC*deg*UQfzsId@zq(D(C41zQl3@= z_c{VL=lQ$P^J|LX)Sh?Tftog(7gNiy;lo7TSa7{DNXoRC0MO6u{Eot3UcMW{q0dW# z^y{r<#jDVK5WlE-$#3Za-~mC81zgE?n@q~hs*{NC+)IE^C-Pn0umT+64+JtTVt-ek z`gNxVP22LoxcfQ3tQmZ*6BPXzar^rat}X@*B&b_}sf%Ehai7;W**mSfUFvS@ea15n zK^6$-d~B*t!v+Pi`?P`*eN8vr6zWRsGn|W6%??RsE*h$5Q0Lc^eDxD~E~hG|duPl} zJx=$6b{E?wt_}e$sSKSTFjSZF`FeG4{pEJY^L($th{f4~)`2gcM+Ie995Wte5QET# z&2pH*rNj0~uj76!y~O3xwnI4V>f}qC&2T4f;>DJn*ZJDdd7+CDqFcQ-)-ep*=U>{m zKZ;@2O1V{Qd*wfq5R{KN4_@e=X{DEd8Fz)lA_VQ^Bji7od}*8Snf^I1v$U~dXH-i1 zah|LPYF&-2&4<^SY3WE*)a6|kLR-YEGizQCubwP-g_4l|_9~>l5MP~&_-d|mP;#kL zcni9-Ty+(7WQcN=R8wqW{X}cv$RK6-=k(J7omPgzsi(yj(aOgUwGMNHC|@q~`-erV zg*EuuX}<Kj;KVJkvt%z5&7pQo;3vdlwwu9ujw3-FtHz1GVAAoGeM_-Z+8Sz4*0<-2 zn{)|2rJ_9c{CtiRjUqyFvk7KT-Dby8jRSsC33hr#{Ic?Zxwv6`)_oAosbI|WzJfPB z4%~=XjG~@#jEUA8u_0%BimSaWVna^v^IHxKyTo9NPQy`IqI7lac2s+CLEwj0aMD)# zHY0ZYl)RpGdx}494#X759(B^d`t%$4Rc4csy)5xzG%eUKG8ubP>(hBqHK9ZakB`8C z+L>_{0U6jD3q^`w)%pb0%bUU0;KkN@{K54V(cy<C36+72O7(ttUP(B;FH`wPZ6hZQ zWos6&Xu$@~sK-y2YJC)wd{j*Q3Vd*sj*MhiZV=y!lL9|aM1hFwn;x3{LUj>NrmFYr z-lB~|e4`)^45!ePL7e9&>MIl)?|=`jV0%RH<lb2EQ_FGUaw~kpN(&=dK06PO)MW)1 zP{isHTV@pWQ-g6L%Ea6-%s;<plc*n}K&5=5HSH%HLy!NIYw>PO{*2XEynEbZ@|358 z=Gtf<U1T9^?NojHCb9wyE*~&#Nu7b)R3uH=vmXr~SOhf?Z*9vl>pGZ8pb%kq5DE_} zS=Xc5qR=5;-Qjd)%E=amJ{J``;~_d>U?(9zIGv1m-an_8rkq}((B}Gpga$e}3^5Lt z+U5j;-h|kLXqE*uv?rNUPL?PTU2a3b=^(zWM5WJIe?2;4Oo;3K^i2h|#XKUOfejj( z&{yAD1!C{~M01H%ZqA`Lk9AY0>5^EMQ~|$#oJFZ@2z2Wpl=LS4g}#;D<$333x>XxC zN<WQ<8Vj*2|BXmgQ<UpqAL|q^vO3PYnJvOO$#-8Gh}C#0#h83F$W@2V=-%CnP?|l} zh<5TS-S=#@`)zV7f1l%!?8ft7>ud@MB6}GcIaTp4{hJjDPV0`sT*^h8)K;tgyiNMf z!Yjn0l>+*ewcp(rx(4o3^{NZC=tYd!xEkkO9$l+!`c`7ma_cJX%8ji_zH+&hR*AGn zWpbdm=ThMIkI(LMclHELA-bh7g)G^M@95<+X_D=88FFq+(c?j#24cU5H+D9>xD77t zT$mcw1g+CKZyj0^Yx>?v!j&t1)0SLUDC@M>zq&B)>`F@^XZ5Dn@za){X`+7H8rSQm z*cVSNvKhGNY<a^T)?K4LxTEgjdME6=URC$-<kRaPw|=wWdK}JRSH6dq+kfP3VLeYO z%}qE`OPXz2D%0iXUym1?8n_)Fn7dV$JC&NiNx6D4J)~UCLEqiTIORI9I-DpZ)V+$~ zq2#ZqMQooR(<OARZbnZexbJZo8(Ir({)uH&*IZ>(fAy!V5B(!8&o?om_FpWN=;raQ zI7@zdo3kMBsHP+)C+?0iq+hp}m!U7pZB{I-=!~CB^{KIQU_(dxfwh$&m0ehT{%+Eo zk%-g!^i*^4_MGBdjMB1uzddTTNjlsxYx#)!e@kq_-NY=6QFf9wu{a1P?_qSu#QRLN zDs`17R&38t%1fJs1f%ZeG6l>zgrD5t+bL!5+X<MIMi?hzJ9!9UoswuYx&(wlHiZ1m z@Fx@nC?e8C*qwwTU_B#|1F@c2G74K3yibNBWp{o0znpYnKO{j18`tIV2T(Hxpua}t z9o>*byRNHD0KSDcC*Zn14|)@UbQ7&TIw1fQgb`yQ00qaul9!*cR-kWZ4*drBa$!gr z;E?{ma4XA(iw(QEJb>;U@%tYbDJc!jXgug$-jh7&WK9G-es8vDV*x@43i@3qnV~V$ zCgitNLzg8q1b6a7+zD*&T93R_0GlV4TX=UpR&zNPt){^Z86qbd1Po61QG+7@i3P*r z^U05p;#Z$(6P7;I-Ax(nMvk%9D8OP|WKF;kAQGeBP`k9#ucZ)ivd4S(Cc5zT7sP^h z9tNj8D#50d#$3RnjHCv8`ftc$_M=U_!{e}FxW&~*rTo87Mx*|9@;w`OY$h=m3Vu5w z7b9;03fCxvjlXbJN=c<QEvX$V?uMI#!dZ{k4X4%grZmJvjF{fttMMOr95XJ92}uJ5 z9A{jl4pHL4GlD3_Bl|DsJyL{J^W|7MZ~f-nmigS-^i*JIHiW|^`dU5yEU7!eQ5+K^ zrNSa%7!x>pKa;+t3CCLvu)0C{-llesI|U=L0P4q5Lm%7;Xaz?Au*q22Sw2si$~4e_ z$P$XaU%xjra(cWHPmU$^mb@h^2FuRWnD`Z1oV4{TwBQ-txhu)dq-`c%exGy6JRdv7 zdzPq=EW26cZM7_3HU7cQ-KUOP8tpy=jOgtscL!CCBT*4fPLGUa;vE5oYbgnIUEeek z{kn93&;r)=wHrd<DsO^{{JY1cisF`>cS$ye?wNAPxnm;MDgs;A*mtY$`8^A5`jVxr z+3d{SH8!G>KhqD{e^e5Bm?WznJFnqVdmt|sBRTVuu1zXK<3N4w#t(U){PCtdQHO;` z=?<n5uaQ`m&0Y1N(gZ4}|5BLg*i|q>Pju#Iy)~ef*E?p)y!4|=h2*s1@h|S`zK*0> zW{StBdIr$D{C7Jy_LThfIiH_?)mLAQ;A;pI`uOZ~Ld8XIPXpzhcZn0)clMU7=$1Bh zvqrwZrYj@O1DK|%`iwc6Ech=>%ei^$FH9?|O6P?B0yPFL0BT9;{{l6k{|2>0_5T93 zExAkkO+j4;tryzg_aj($h9HIojYJkscbmSBwc@hU35(UT)fTg3N1n;D%9+mX<I--w zo-zl53AdRXOS!0NXj`toIi&w57eRl5P=Xi9?z1eB3%E@d&#M2PTZ;bO8NJ_L4vVb! z>hxl9C~T_diskNxEI)X--=C@Z(BPVL>Bd_zg9j>Ai=uvB%j7nZarrf@BaTLUX0am* zhyAX+@hytqbzhaXQ|Kp}^`hO)u`Di(Z7`LYFARPA(|)^1%L!t+2;Wk=d>8)7QuBln zUds<{e$Xnhc}>hZ`0#wM{jNzT6;98n{rrt3zbBK&c3URQ<O|8|s0`Y&M2j{WMnIA< zXfO(N!zDse0E7qZdgV(`A@&R1V$_Hd4IS9}5ha~{X3Q_ZeNaSx)&7_q5m*)IGqI!- z0oSxcKHDD{1Dh}d>DF!tgA1gI5R30n*^TgknpU3Zq@Kp!unXXno-KeW-+$=UOqOE4 z56oo#&y#dHB3YVId@Eofz={k3!5R?)cX??EHcdr5$==G1KRcomfj^R|J`oNR&3vIs z_Uncact*2wSCEK)2X)0Z_5_^w{?*1QjMzRM`7DHw+z1`7(*}ZPF>|!N#Os%5f5-BY zt^BK~P5yXye7h3^z>#SRx&rWypx2unj&`Qp$KVT&TX4$VDSU^c(t-8zgQU-k{bBtt zPkFk!?QV)2oXN6JYRa`AU2lVSBeEzw-@66xssGA8QqyJM%jg$z7TQgluoK(VtXrfC zpK=OSvDFtf8(k;DzL4QQUhP@`vi~VW;kz1=TB*MMDxR4)dTe-yVQ067#iD>@op}GL zNbP;EtOW}>uB$=r*OzuG6+dg>#pKRAW3IW@ayK0&K0Yp4-qgw3{|>z-C{xcz7>UX^ z21SA9#e8}%3n!Q1gZJE5!qp^391~;xlpoy6usLO7BEF`Me~(Dr&M&1eg2$+^kJKv7 zU;E4RqmR9;4Ik1O{8l?VIKI{vBCMzUrGL8xt44{!AkjUl4&nJ7Eh0Y{t@cPo*K1vQ zMk=|6=WNtKMx5Eb<HJ1#Unf$p#ZMVIPfTxWI$hO{iVJUAj)`ti<mzQ9Y#-a3&&jR6 zqQYA3iC2+waTyx?eA!<9B=$hmwNs7zlMRU8EA6A1hlJk=>F<s)e`;}HNq2qpgfl%q zq-q?OdAYOQyj<^P-?qnGnEHNcOd4?f)0q3?nfjv8|91QValr8h&;RB4$GOC?o!2m@ zuBz&WY?im4-RA1^!2jI6+#vhDF6vFcc4{(>RbpDB0p^M%FE3hw8Yj#9*7p;kH+30> zO@4&M#72P5N^O-97<<Fy7*qxEj30fzt15@0$Vijmcvbt#l8`_c7zp0WV7`#cj>Bar zB=a84DJfPP73^n5^4kS7kjW5-8Vx}a$bRVdl4#dk2Wb2E3G>>a;h^4QJlVw~y5~*8 zh=H&>(~sparULIN9MbmI3mH~+HbHNOU!d_e*nJTj1Pt|_A1Wh$?+x#xgXdt_Y8q8i zRaQokfTW3$PlDJI1{t?pUy9G?Rgaa%4knUeU8g*`Z&EZ(V)*ujuOF%5{ioNx_QXZb zpDszj*H#D^;uYWQu~JV&{LCFT(?}5S><(Giy=8gxP55`FqmIvf+T8M|UyamjB8ofj zI`kC07kOFyT8>Ha^L}R-cCbUZfL%D?-({B8<)RaJ7b=QsMvGi+zbO?)34eVeNVdEa zd$s5k-z=ipt~^IKLBVbpe)}O@xJ`dk@v}*A4{J|@_EYMR-S0~l)t99&#Tbfe)VY_b z3ribO#pEqz&HWeSpS9ZDE^Qk>$yKEAC;;HW=QRPMJOT=Y15`*i7SsHNQeX^`b1D>? zL`l@+bz)!x*I$4f?7i&Ka7tm6oY7{yy)6`~KpZ0NK_%OIG+^mSGPe3|)6fSUCFD^7 z<MoI~m)@LQ<aD6d)h|2*V`y(S7SsBLQeh0|q*C8u<(%`s(HINn6cg|@#GGRDN)wQv zBjz-^bQB7w7EazJvh`AFN?qaWAZ2zXtE=gzuS!&+g`@*jD57#Ick-*T?GkZRhji&{ zQMp~+)LqhdYu&r4B12ygGbvz2`<No1$vJY9)ek*x+q(%{$x&3}RTG*`J;g^{BG8<P z2NSVC(Bb;%5<jqbF^RlymNl1$&8xYnmqF{n!E%T#^BW?xY>^x1Bfbnofix@Hf;hKr zQC<}WQ>ilVE?x~Dk(2wOP<dneGUOwG4pkcg=F4Tu-w6*mEpFVsep>&|<HSeVW0biZ zlgH@OuX+ryV;%CE{`e9aw)Q4$<w%G)7KP0_*op?7yuKN=6on1S3BYxOYc^qw9ed*z zZRxxwux-5C(12@;_8GBad()-N1ymv(h(9xqBqr2)vw?v|?(K@CX5ZnO0~nu<a=r%3 zQRHwm?l$sVT5R37J1}Px0(}f9;_ixf&~{8V-vRNL4+7JX!5G57R36;T4Ir@J)FFnh zn>PC0FvQh12F?S6%MLgX+-x1+p0pt@nKChLUoPj!<_2F`vO_YuXm3_V+&}k?)`Vk- zY%${6PoPqOMn8p0Cf;btfUlzX4@t{J^uJDKET)&1c_5|~hN_~?CM=AqLg!2VnwKad z<E{?rObySU2=J;y=MFT*;YlQC6b>T5euhoGGmj)Yx~tfSKjpJxI2bT%Es397#k9vi zT%Me2hFiC7mgrt+ezn~wGdbWZ{+l#;Z4D%hupca~mIkHa`$LNoLHqYze)z4ud+z?z zPdn+f;%wi5x$eoY(&!J6eFz@(8P)pWNl!7{X}!2O9eOA?YY+b+H|-MERDF2s%@eKi zOTnTcY@Nvr#h)xUeJg&KHraF&_0q)cEiwdNV<vc!{p@?HM(>f~jg>v4Cr@;b70zhI zOxd{;RPsDyytv<uuO+VDox%>TPBDH%Rr<|_yR__Vmzn6=K<0saAyd`ne5V8VUW`Tg z*fTrY4^yX*JlV-w9kKn*-lz{XLgL*B&NLv=ts7C=z3F7LZdN`rQRK?gm+n&dX7ne- z!>OyDcI@uMznkjFkMHNW{OBtKU$x3>mF;=mTgqp#)#{o5#DWzu&m&$jt5xs5>!s@8 zN~FEnt(5ZYrswm?Ar%sle>f8aS9BAZCLU69??_*5WYs6)4qi*&Hx>+mJC^soj=EVb z-kpePDm-Rp66IHNN^^A+_7MF?Le)mi<nwI*lkRI$3`#`II{Ee7VK;5CI)!-)(SZ{X z%L!wQXLa=^0i1@VJuK$rm6XCGxRQG9!q?{#toYBgjg;<2KMSP_B7O!Tnr<@r`cZ)e z2D(<nt_L8zfuh1~Hk{^iUq-56+kScOH>tuk`&+3kj$CByY8^iPT&j^7L0mXVa1LkT z{TA(8bdlkMSP|Zoz}k^<3(_61lu~n&%;4pWIvX~gaw;&;?>dm(S!#gWw(c_T1s@V> zRo@oYQ-`=4X7MV}@{sNUBaO-dbFPWf7L(0~^Vhp_fdFs>!KD@mE~BHKby0%gQp=P< zNbxgAKSq{nvKjLytSr_La&i`g{)4~;z`sz$5H>G=rXDf|;$EY`QeIpM))XUSGWmV} zU0;Qho`s)EgFKi6Y?eEi97Yh>0{c&YW$>9f^$>NmT^U@pMim2ZGVnGJy~&c1&W*LO zocaa{!+Vq)8wcQ1|N0OTfE?Lr8_0reZYouOev|v9DKRz{)f?=ti~w7(qcaK;(_^^W zsn9XzCJ0E}_|Za9Scs_TLNjBaUxpaes1J}Z6}>xZ94hUx&U>%T?eNC^dh#7$`c33u zX23Sszy6s19)oTdd5{ges$~*OVURDo4l1{48O9U4pkHcoH5h@nlJPSC-0h%^>M`b= zEM@*<xsPSmG{4{1!HbA`MjzV>f6@1C0{bF=M(SN~^0w;`WhFP#d`%nP{$;-3w12#~ z(-Cz$gP_@__GD&whdF4=k3%6T;anJ%pQ{`z84Lk3BKz~;++)U{r9CEW=g7r<gg#Dt zvjdp?&of7}2^lPGifrL<PIxTtb0_mFSrW6;wr3z&f|)lAN=DLz6vS5KNYK5ZT9kVr z&98&MY9s;%$D0(4QQ>0~9<)$^afWZZw=CeyW169iK{@`^g(0w_b`?>@7I7D{`_8^M z0o%_2Oqd5#8TB#Z;YODBsdPX2k`(dyZ!1@~m3kM-U?3N%HY)hzb<~*QCbT2*8dXy} zjMC%Sm{XI4mkQx`A8^*c^TWjE1SSNo^q|m8>qzG?*lS3R!9}$ht*7;1G~u)%5u=(O zT_D_>ZlJ*i9f*LB294|taS+b6R&b_m^c_WW1m?{$_901LJ1o$}8_AgdSyWcF!G)AJ zf@mRvhnDiVtv9{#(Hne1Kr92=yad+!|NjTM+!L}|NkFjsH-jI#O;@!^?FoGdzkc++ zNe1F+_dNS?c>M+Ow%UE-z1`>H^L~(UTpf?hZeShY?3orXZe0!D{B~y7KjUJORX?UU zaj~(X)16vh`C^gT=0~g1^v4fwMcDy{w1;bcT-LK`q|7%%|3>M!guhXmR`(y2{)s?o z)qkP%v9$W2=CN|js$`_+{JM4mB$vD9vHRNUa9)n?PKNsGv9aIujd$F=HSGp@Q)U)h z-w2ePFQYJO&$j*aemI!E*gg!@@f<F5QVn#iDkvM1u(Fw%w6Yo#w=Lfkw~YCrNwIpN zf9KJE)Ve^T{J6M*Yo{Oa;4t=l5a{i9w`>b(?G<`(laW5ccnAH9w9EZpNc-L3!RCon zH*@Zr0?#dFbIRW?eNeA))bBF0i{7GocKfb>%-6AEZvue{ORmOK0fTv|7FqLxO81zW z?DIT>q36psYYKX={VDfSmKmcD@qYJ{9E4mee;q2Ka2hZ~WspM%@x?2fq96j$rY^wQ zZM2b`-P_Asj)+P-Wmoera)yf}XY}`It6)!Qp@+nKAqx8Fvj(ojbK<0l-_h1=BU@<N zYRu3LTZ@)SfM$lmhoBmyw@G3<jIcQQXYjCXJHMQKVhRkt%^3b{3@xt!?1PI2Xd{H= zZ>EfTQ4W}z2o{O_*D`Yg&|(#c)p;P_&`kW6(>|{r&sHv&)A-cpGU|OWFC%_ClC`y? z6?y-mrS5E|QE>1TT#WdDdFTM<VT!6FO@(-jsQcta?Hy>G(o{E!v=^oC?ji^r(j2r= zAVBI6E+cIagUi049uJT^qp#d3_<#`usjMD>XSFFH-kvtyte+EMcE-{?88H?l59SNM z7PWn&x92yn{@YqUsvcQp@v&C1)i2jXjDBmm<}=#gZR|T?;tpwynEDhob3gzZ*&y!- zwq=yYM%>W4Gi^dzs~8F%lraul(oMNfmgN$O$>k$YA+N#;tLAsn=twG_c_fbdRGJbQ zrBJG2KKYX-z~5L3Q6{tXNN(<~i*$SDd7ZNBF?+4^dv6DOZ{64UnSey504V;3#Ir?A zfhP^p{*;m~0_Z1q21gHV$AvE}Ruju#bPMzH(m~Z4EKN};bevpCGLZzV=pBDR_2_yu z(?vPG<S68kMzMd?+)Pa(pBsv*1%?&0>#3(i63H~r08WJ~LaiK!mRmeS!NJ^!5CXxa z3(#_eF*pZ}>0pmu6fxJj8}-yWxm|p`gcs|5R|lehBVA16e!A3n<-sW=IWK(4`yn+# zgIiq^&tnYs{rQ`v|3&)p5u}e__#YJMLZC?Ho(Ar#C_aPG#fzJrnXt9B>suXPT{SSg zf2y8d%j0;s2gI@$2Arm+?9VUX-MLECuh?zXhz88>yx8Q~b}Ck77J!tER>)|2{KHvk zc7`!6={mp^^mIPvtoMIo3Qfk}n8K;|52nmM1(;&^FH8}V`wylp0!#srLM;3LR094x z2QW>$#<tor++)i#S~NyapsOobuDexMgZ<Ujq@e80=*{tZji~AEmVtk1Wn8;7-$ZIY zAha_09$M-@TG^aFD|6ic5X;E2{)lCGBBw7F+F}04EP(RLqNfJP0?@@nca+htb~Lj7 zI|~qy0>l7yhPeD)w|8m!k|YUrjVybCl(5lHwB{e{Iy`x?o_j@zN%8XHP^feI<q*mp z6JTJ|10a$834nxK4+$iF#7@aAxAa6_8Sy@&3!vyRkU68~)>y7fb(!l3U*<pZgU+Qv zxE}6<XxRk9^}o8Yf^hv8K>=2^Iibbx?Z$n03l{}}sbSPLD%3l`yMvDN-uQ@MB&e^? zBkWZAhdnxVnDOUWYINZDk;(yJEG|eY0uRKQ>TomveM^-`168%2{38u|B7h!ba}Naa zh(QQJF2RyWb?1;)ywLq4=3}npP$0?O1uyd6NaRJu%PH<At{}mvmXOBkm!@`B3Ek~; zU;RyhbZbIubDxSE4Ykh6^OF7KCcdWl;__9><A5%D?!AQO5ZKW>_RG{)i%Dm4VNyM) zoi1|;y*);yw|_jM*fp@;4r0FCRd2?IPCdT^rF4u&Z&HGOMc0|7!o}HwVs~qpV{UV9 zi~XI8=hmRf)+Z9VNxV<N%+~R9_esm;%u|CVvL)1;Z~y$nF-M(^XTmG<?UW{8o;2oa z`UUsq15wOm!?@3ccm9BP@%=8jJyx#?dOZ)C-xOZ1Z{50?@-J>&P^sMCBZF|Rez=n? z2k#7Gss+vj7RK!5TFy@$#bFP(mM_*}nR#ohnPNStxE&e0{R%mw<~nKw@O?|$hRb@g z_TfvJ;a|<olzk6!^-z()wsK)NA(Gf2c+F$Loioe?3`_##a?0ylH>wFE4g1hSM|JIa zQuU*OsDeQaAr&B|_S`m{)*JOWtt^)I=!~ceC}iHvf<l>cWnmmJY`NV&9}K}SE(`Fr za)vMQecc=|w}7klk>!~m<tiMhfd_V{)WmZf_+6A=Bbe>j>{!d)_d04-l_NajuF8@E z<SwLoh&y9pQ@uU;gEg6$q>^5hw^<w8NbjHYl|xINI1F3nFzi<n@8zKiD;ww0iL&G5 z^4l)$1z(Q4e>`|g>~_0uvVeTH2~5C_5tx9J0y%SLkI`%iQc13#pKuru6R=BavM=Bz zB9xcF9@qXL^)z}2k9<Q)AbjHu)%bi%Y)Oaw%>vmP)|blPcggncIJeG)k9S|NST-y} zxqtPZD`=smX`(7<K`r&ZZRy0YD`bejX9E7=PiH!tR|LBCRKOvY0f&gO=zaTHEJ~Sn zVT-T=K>9h9j+A$9ibTLus3D!11l$Xq{)d@5CY$#y%_qAYUiT=~T2P~9DG#IRK%d}b zq*SBw=#0>j1B#cUj79mTtq$bU7bT6%7WE(k0uXQM;P>pWJa9dwU{$_NzfH1|4rdrH z-is>q=^mx#G&~UYqi_IE4LbdT2TLv(@e~yZ3HqNr9vu$Dr0>Q`!QxGoCIo376amXf zI&hRGMA&Zt+XaO69ZrabhbD^@6HwJg8AXu2gOLvAHar~tq63Q*b2ga~uTfgZ3<u=R zy>A!>TUo1xbYWQpZmZ*KH@^P(tIBOc$Cpv90HYy^iw}bfRjHn=0J(n5{7RdSGcmc0 z1eA7Wt2eo1R@k+DBUSsFXQO4w!Dz%mh-NuRVWT##Jb^9f>;==KuIeX(t3R{(*gyM! zN9lp&cAMcBJ?0zO$36<m8)%>(wSreyv@Fd>c!2xx#a+wAs@g|1{}MP7jJDS+v#%Do zVyxdw2Bz|~rSEvGMmXK^tnC#Jhm_M-z6>h8k3cgh3$(I|f&Qnj8%{<F9FPANIAkx5 z_3I>y;N`JtA@?Omhb}~%t21#JuNpC13@(|SwLiScRa;D&OwD8XdI8cwWS<jC+>;VK z*LB_t3+3u9gpCPz=@x4QIt@`+`Wbpgwpe|3yvO>1G^Wn!BzJ69r|B_N`+I)p-rE$* z7fM=SKYUmY#&gNf?_RIN9zrI88w=?J9i`iQY#e_}8y(^`NToa6F=JR$O22v5nC62Q zx1eda^glW7ckbC6|5N84@X|!2xSft2JD18Pwk)S6H?7CSU)fBETCPHTFJExJJMh|$ zW7B^hZe|p@RlRy(vOFZDx)x`Nr((09;Lb9mVbs4o2$NqLZ})K6J@5Vi4|0zRdc{mY zG17hQ-N=JKsyAQyA~|ll#g~IOc3NUG3m(@+Hb1TtoF%BT71KW{M_;vIsc9Z`EDS4{ z9;`H&<8qXAOSo371AR`b^4APeo?SFQ;`${<EIx3N|DiC{toi40{)g6Vx{OUwe{l3% zJh+digM>tld(~!$R-2t*DT}<ND4(P`if@;>bS~7tI2M1VGJ?F#fhy|k(W;yA0)AwQ zO09M{SA6KrCY;j#@r6T}iyCJz?a}Tn0(H*g>)mhtnBwY5*mV1wNDiYfbr<jjmNyB# z6`JpVWB^?qj#l*Vk&s}J0hJtM3$A}R?gC4O--l5-Es$~T#zi6q@3ottYu(1ratzS2 zjui_WCfRFD-!o!)yh4+VRUnoeR63J@+YM7eplHV%V8#O-Bb1<V)MkffE*wtOdzu_- z>Q(IcmA!C|Lf`q2b4EP-y!LyWiq#~FWbtoD(OK4B5Q2~wg{3}70Ko8HW<+gNd>%^H z=uP^l9*6DTXb@?-2r*~~f+}B6YI~oYHGsty2>!hslmv7?F~SW+@6V?@Lr8J=FBfz^ zA}3Cd9o6o)^pYw534y2TSAw`7tzL&0@Ux>1{H7D`O3=$_uytmr;inucchKMB?{lIz zE+itWUu>7Ap9o*!WIUe5*1vVRs%(53dip7m`V*OVR>VyMKI~WM<KBYF-Ep*of0rwj z6hdR3=zdsOC0Q}881bc#kGZN=MZaZc(KH7ajZy&J9|iQKwfGO3tTdP%6B5!;ucYYH zkedywOcAFBp1^>fa<uXs4Yb=OLk9;iA@;ghw+S%RxubCTEWU1?lVYfwfqY<!>$4`J zf~NHiwWoz4O7Pov19PDdmJxLrAGO17q|KI*E8!U6f6OU(t4`RCao0zgk-W2=)%hQw z^(NMwN55XN*^CXZX!#{u<2Xaipx|W$XGb<l^M(yi{*%4y^BX#lKC%*9ZD7^oJy7GG zI!+C2-;Hi|m*m|;<QkI&7QCAo7<m^U?{mo>&pW~8o2=Myl$J>Ft#!{^Qf|bNXS6G$ zB1?Bp3YM@++bs*6PGF@d3^}dX{nit~#B4I&pt@((i$s!V7Zt2XMjX&?L^y|v<n0iK zOska`ZX+uR4;X=|I=R}Dn~JmD+aH(MA6R?S{=zB=pp861XAPhQ%K@tFz0p+mVbYM| z@|tyK%vQO3m^g_IuE%JV4KBF50s%NwsLrD6<bc;M()J_niVdJU+Sa@Wipj_jDbKCP z3({B?VjVsN!`&kno5UYuw^1bNm<7S|XXHI87{`$u-KZ5@%?2Ou*YYFwD8Ue;V-y5R z93$@rI17nscM~ndmci-Ud8a(4Y>pH6lPTU*w>$UC&x&U?Ej_qIDBC3gtcWL;^kz++ z`p;reXw*OUpBAs7isFj>do5BbRpvZmevMB(FESp~*4&K4NzJk|bWIt*vJK9W{@KaH zj^VyfDiI3<@IV;Pn#dr9->77Kw?L6XkEd0%>VzVJa!^48^}~)iX{`8AM8N^5PWbl( zT+excRirWzOrY$GES@roxMT%|35>kp@JrI4z%;Im{CezppUc$$sL8k#2>#-_CTEUI zGuXBI0)y?wR<OwekuVw*E^Q%<7Az%gER2Ro{){igm%&+-Pe{YTWEh~6o;e6W<DY)8 z>5=*E&~uZj@Fe&*uqrgYls7n#<4+1!v}M4#YHq(q0#bFu0FNN==Iw_h{~yi{`pes0 zNkI-1XI)W3A9|wba}>+xoyK#$EVPB4CV0QoKK(1hYs7xM$~m(9{ovFa&uy>d`i|+L zd|f-eW{V!D>M8rhOV028?mxWd!xo36#LSbtoQ^V$)ki14*+&T(&GXnaJ-j{o4Rti2 z<cu*ySJ2#7;T`iG2-@7yEp94a%J4XCoAt+$9V`2om$_y_1Zue$6y-`6x2-MqYyK|g zTD?lm%-#BQXTUSEYv4~H=YsOz+EBVWLc@=%y4BR50I~YyU!F6@?9u6rxqm$ks{>?y zb%n2bbc5*o#L>riNVVK@i`ZSaj7axS)dRr{-Nmu_Rdq$!zLqRG_e1$;9%S{yX!R}( zcQ8ktVF9T5ZgJ!D?RvC-C3nf}5L(e&pSka+_jboQBz0MfU92-p@`N9b$gZx><vIDb zpWd|}zddsOKrBg_c{bA;yMN??8}3&i>O-$H))Z15JpW5F5;OANf^M|Bv2!o_ZtiKA z(ZbnLB+ly;W%h@EsqU(U5|mF?ZRAdby<gX?v*8Q%k-xfJc~j>~p(0MGu^i}fsZ?X0 zAmwJ185rF8v-GR}g1h-=aj|1Jy3^(^LPwJD3Bv4#U*v9Q&?Ab`g&MkxGZw8k=X5@Y zy;n-?YJpeJlcF0@1o&q42@LnLNC<X>ZfY~3$F2~e)75P8pjdmO=8#fjd7}=_@}RKs zzeIuCzTl~!NlQL$N>M26VDy$tO+w_M(=z<K6Y6{qexByWQe;&A5^7T#U<L7I%F9qi zT~^~%wonP^AuEo*%@Up)g*OTslw1#>Jedd^gC|7<Cl-SV9pjP>GaC){0U8RbG@_k4 z3hEO~jHBG^jD30}Ji*LZIKLm^X=0+WHA#Ed{|q6*`StFR777~SHEM9};H<awfU<VW z<bF+NJ!=O4lO0m~OEhL4hf!;6OQ<>16_c6b9mGthGtBW+CLLbM7QmC}k^*m4Ijd0i z%bF82drUl7;>U3^<KMSKdVjIzk}0cc*F-{M_NP198ms-)^N8ZG#<d_X=4dVTzsnu+ zQbd0<g|_W&OD%)yeRi|qblE4g>$OW*wrwzmdPyn;54zPi-ie}BHry+#v?VvBp<elR z9m<0ppC|kD$tOz_bvA+zq?W>Cd-|8rw12+{SIJP;{e_p=z*d@qm5KWL)%)}54qJDh z#`@$_6bdjn-SMIJtm#Kn3TXsE{05GV9J5$F^)x=Kr$XvaMbD{w>TTWM90g+C#!9%T zQ*8JqdQO1RH}<u7##X3r%%-B=5jtAk*uLxi%=AY-y~<05rW*dqv!+@9nIDoTTAj%a zK9u3pD4iXH@yUjFJz;9XZY`e_!#D+>qw?_U8G5Jqe7g&$A@}kaD3ZD#nLQ>L#Pi9D z_�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�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ÇXPuZ= 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 -- GitLab